
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 암호화 모듈입니다. 이 배포판에는 LibTomCrypt가 내부적으로 사용하는 번들 LibTomMath 라이브러리를 기반으로 구축된 Math::BigInt 백엔드인 Math::BigInt::LTM도 포함되어 있습니다.
이 모듈은 주로 최상위 배포/문서 페이지 역할을 합니다. 실제 작업에는 아래에 나열된 구체적인 모듈 중 하나를 사용하세요.
새로운 설계에서는 단순 암호 모드보다 인증 암호화(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
수학 공급자가 사용하는 자릿수당 비트 수를 반환합니다.
CryptX의 일부는 번들된 LibTomMath 라이브러리를 기반으로 하는 Math::BigInt 백엔드인 Math::BigInt::LTM입니다. 이는 위의 암호화 API와는 별개이지만, 동일한 배포판에 포함되어 배포되며 LibTomCrypt가 의존하는 동일한 대정수 엔진을 사용합니다.
이 프로그램은 자유 소프트웨어입니다. Perl 자체와 동일한 조건으로 재배포하거나 수정할 수 있습니다.
저작권 (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 파서
Crypt::ASN1은 커스텀 ASN.1 / DER 파싱 또는 인코딩이 필요할 때만 사용하세요.
대부분의 일반적인 키 및 인증서 형식은 이미 PK 모듈에서 처리됩니다.
기타 헬퍼
Crypt::Misc (base64/base32/base58 코덱, PEM 헬퍼, 상수 시간 비교, UUID 생성, 옥텟 증가 헬퍼 및 관련 유틸리티 함수)