
CryptX - 暗号ツールキット
CryptX はディストリビューションのエントリポイントです。通常のコードでは、下記に挙げる具体的なモジュールのいずれかをロードします。
## one-shot hashing
use Crypt::Digest qw(digest_data_hex);
my $sha256 = digest_data_hex('SHA256', 'hello world');
## classic AES-CBC encryption with padding
use Crypt::Mode::CBC;
my $cbc = Crypt::Mode::CBC->new('AES');
my $iv = random_bytes(16); # 16-byte AES block-size IV
my $cbc_ciphertext = $cbc->encrypt('hello world', $key, $iv);
## authenticated encryption (AEAD) with AES
use Crypt::AuthEnc::GCM qw(gcm_encrypt_authenticate);
my $key = random_bytes(32); # 32-byte AES-256 key
my $nonce = random_bytes(12); # 12-byte unique nonce
my ($ciphertext, $tag) = gcm_encrypt_authenticate('AES', $key, $nonce, 'header', 'hello world');
## message authentication
use Crypt::Mac::HMAC qw(hmac_hex);
my $mac = hmac_hex('SHA256', $key, 'hello world');
## secure random data + UUID helpers
use Crypt::PRNG qw(random_bytes random_string);
use Crypt::Misc qw(random_v4uuid random_v7uuid);
my $salt = random_bytes(16);
my $token = random_string(24);
my $uuid4 = random_v4uuid();
my $uuid7 = random_v7uuid();
## classic password-based key derivation
use Crypt::KeyDerivation qw(pbkdf2);
my $dk = pbkdf2('password', $salt, 100_000, 'SHA256', 32);
## bare stream cipher (authenticate separately)
use Crypt::Stream::ChaCha;
my $stream = Crypt::Stream::ChaCha->new($key, $nonce);
my $stream_ciphertext = $stream->crypt('hello world');
## modern signatures
use Crypt::PK::Ed25519;
my $signer = Crypt::PK::Ed25519->new->generate_key;
my $sig = $signer->sign_message('hello world');
my $ok = $signer->verify_message($sig, 'hello world');
## key agreement
use Crypt::PK::X25519;
my $alice = Crypt::PK::X25519->new->generate_key;
my $bob = Crypt::PK::X25519->new->generate_key;
my $shared_secret = $alice->shared_secret($bob);
バンドルされている LibTomCrypt ライブラリをベースにした Perl 暗号モジュール群です。 このディストリビューションには Math::BigInt::LTM も含まれます。これは、バンドルされている LibTomMath ライブラリをベースにした Math::BigInt バックエンドで、 LibTomCrypt が内部で使用しています。
このモジュールは主に、ディストリビューション / ドキュメントの最上位ページとして機能します。実際の作業には、下記に挙げる具体的なモジュールのいずれかを使用してください。
新しい設計では、素の暗号モードよりも認証付き暗号化 (AEAD) を優先してください:
random_bytes、random_bytes_hex、random_bytes_b64、random_bytes_b64u、random_string、random_string_from がほとんどのユースケースをカバーします。OO API とアルゴリズム固有のラッパー (Crypt::PRNG::ChaCha20、Crypt::PRNG::Fortuna など) は、主に決定論的ストリームや特定の PRNG との相互運用のために使用します。random_v4uuid は、不透明なランダム識別子に使用します。ミリ秒単位の作成時刻でソートされる、おおまかに時刻順の識別子が必要な場合は random_v7uuid を使用します。UUID は識別子であり、秘密のランダムバイトの代替ではありません。ストリーム暗号は、ブロックパディングなしでデータをバイト単位で暗号化します。ほとんどのアプリケーションでは、暗号化と認証をまとめた AEAD モード (上記参照) を推奨します。認証を別途処理する場合にのみ、素のストリーム暗号を使用してください。
これらは、認証を別途処理するか、認証が不要な場合にのみ使用してください:
Crypt::Cipher::AES、Crypt::Cipher::Twofish などの個別モジュールは、生の単一ブロック暗号化を実装しており、直接使用されることはほとんどありません。ほとんどすべての場合、代わりに AEAD モード (Crypt::AuthEnc::GCM、Crypt::AuthEnc::CCM) またはブロック暗号モード (Crypt::Mode::CBC、Crypt::Mode::CTR) を通して使用してください。暗号を選択する場合、AES が既定です。ほとんどの現代の CPU でハードウェアアクセラレーションが利用できます。
Crypt::Checksum::CRC32 と Crypt::Checksum::Adler32 は、偶発的な破損の検出など、攻撃を想定しない整合性チェックにのみ使用してください。これらは暗号学的な整合性や真正性のメカニズムではありません。暗号学的な用途には、Crypt::Digest、Crypt::Mac、または Crypt::AuthEnc の AEAD モードを推奨します。
ほとんどの CryptX モジュールは、croak (Carp 由来) を呼び出してエラーを報告します。無効なパラメータ、サポートされていないアルゴリズム、誤った鍵サイズ、不正な入力、内部ライブラリの障害は、通常、説明的なメッセージとともに croak します。例外は eval または Try::Tiny で捕捉してください。
一部の検証スタイルのヘルパーは、croak ではなく戻り値を使用します。最も重要な例は、認証付き暗号化モジュール Crypt::AuthEnc::* の *_decrypt_verify 関数です。認証に失敗すると、これらは undef を返し、暗号文が改ざんされたか、誤った鍵 / nonce が使用されたことを示します。他のモジュールの一部のパーサー / デコーダヘルパーも、不正な入力に対して undef または false を返すため、正確な失敗時のセマンティクスが必要な場合は、具体的なモジュールの POD を確認してください。
トップレベルのファミリモジュール
Crypt::Cipher, Crypt::Mode, Crypt::AuthEnc, Crypt::Digest, Crypt::Mac, Crypt::Checksum, Crypt::PRNG, Crypt::PK, Crypt::KeyDerivation, Crypt::Misc, Crypt::ASN1
対称暗号
Crypt::Cipher::AES, Crypt::Cipher::Anubis, Crypt::Cipher::ARIA, Crypt::Cipher::Blowfish, Crypt::Cipher::Camellia, Crypt::Cipher::CAST5, Crypt::Cipher::DES, Crypt::Cipher::DES_EDE, Crypt::Cipher::IDEA, Crypt::Cipher::KASUMI, Crypt::Cipher::Khazad, Crypt::Cipher::MULTI2, Crypt::Cipher::Noekeon, Crypt::Cipher::RC2, , , , , , , , , , , , ,
これらの低レベル関数は、バンドルされている LibTomCrypt ビルドの詳細を公開します。 これらはトラブルシューティングとバグレポートを目的としており、通常の使用を意図していません。
my $str = CryptX::ltc_build_settings();
バンドルされている LibTomCrypt ライブラリのビルド時に有効になっていたすべてのコンパイル時オプション(暗号、ハッシュ、MAC、PK アルゴリズム、コンパイラフラグなど)を説明する複数行の文字列を返します。
my $name = CryptX::ltc_mp_name();
# e.g. "LTM" (LibTomMath)
使用中の数学プロバイダーのバックエンド名を返します。
my $bits = CryptX::ltc_mp_bits_per_digit();
# e.g. 60
数学プロバイダーが使用する1桁あたりのビット数を返します。
CryptX の一部として、バンドルされている LibTomMath ライブラリに基づく Math::BigInt バックエンドである Math::BigInt::LTM が含まれています。これは上記の暗号 API とは別個のものですが、同じディストリビューションに同梱されており、LibTomCrypt が依存しているのと同じ多倍長整数エンジンを使用します。
このプログラムはフリーソフトウェアです。Perl 自体と同じ条件で再配布および変更することができます。
Copyright (c) 2013-2026 DCIT, a.s. https://www.dcit.cz / Karel Miko
ストリーム暗号
Crypt::Stream::RC4, Crypt::Stream::ChaCha, Crypt::Stream::XChaCha, Crypt::Stream::Salsa20, Crypt::Stream::XSalsa20, Crypt::Stream::Sober128, Crypt::Stream::Sosemanuk, Crypt::Stream::Rabbit
認証付き暗号化モード
Crypt::AuthEnc::CCM, Crypt::AuthEnc::EAX, Crypt::AuthEnc::GCM, Crypt::AuthEnc::GCMSIV, Crypt::AuthEnc::OCB, Crypt::AuthEnc::ChaCha20Poly1305, Crypt::AuthEnc::XChaCha20Poly1305, Crypt::AuthEnc::SIV
ハッシュ関数Crypt::Digest::BLAKE2b_160, Crypt::Digest::BLAKE2b_256, Crypt::Digest::BLAKE2b_384, Crypt::Digest::BLAKE2b_512, Crypt::Digest::BLAKE2s_128, Crypt::Digest::BLAKE2s_160, Crypt::Digest::BLAKE2s_224, Crypt::Digest::BLAKE2s_256, Crypt::Digest::CHAES, Crypt::Digest::MD2, Crypt::Digest::MD4, Crypt::Digest::MD5, Crypt::Digest::RIPEMD128, Crypt::Digest::RIPEMD160, Crypt::Digest::RIPEMD256, Crypt::Digest::RIPEMD320, Crypt::Digest::SHA1, Crypt::Digest::SHA224, Crypt::Digest::SHA256, Crypt::Digest::SHA384, Crypt::Digest::SHA512, Crypt::Digest::SHA512_224, Crypt::Digest::SHA512_256, Crypt::Digest::Tiger192, Crypt::Digest::Whirlpool, Crypt::Digest::Keccak224, Crypt::Digest::Keccak256, Crypt::Digest::Keccak384, Crypt::Digest::Keccak512, Crypt::Digest::SHA3_224, Crypt::Digest::SHA3_256, Crypt::Digest::SHA3_384, Crypt::Digest::SHA3_512, Crypt::Digest::SHAKE, Crypt::Digest::TurboSHAKE, Crypt::Digest::KangarooTwelve, Crypt::Digest::SM3
メッセージ認証コード
Crypt::Mac::BLAKE2b, Crypt::Mac::BLAKE2s, Crypt::Mac::F9, Crypt::Mac::HMAC, Crypt::Mac::KMAC, Crypt::Mac::OMAC, Crypt::Mac::Pelican, Crypt::Mac::PMAC, Crypt::Mac::XCBC, Crypt::Mac::Poly1305
公開鍵暗号
Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::ECC, Crypt::PK::DH, Crypt::PK::Ed25519, Crypt::PK::X25519, Crypt::PK::Ed448, Crypt::PK::X448
暗号学的に安全な乱数生成器
Crypt::PRNG::Fortuna, Crypt::PRNG::Yarrow, Crypt::PRNG::RC4, Crypt::PRNG::Sober128, Crypt::PRNG::ChaCha20
鍵導出関数
ASN.1 パーサー
カスタムの ASN.1 / DER パースまたはエンコードが必要な場合にのみ Crypt::ASN1 を使用してください。
一般的な鍵および証明書形式のほとんどは PK モジュールで既に処理されています。
その他のヘルパー
Crypt::Misc (base64/base32/base58 コーデック、PEM ヘルパー、定数時間比較、UUID 生成、オクテットインクリメントヘルパー、および関連ユーティリティ関数)