
対称暗号、AEADモード、ハッシュ関数、MAC、公開鍵暗号、鍵導出、およびバンドルされたLibTomCryptライブラリによる安全な乱数生成を提供するPerl暗号化ツールキット。
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 でハードウェアアクセラレーションが利用できます。