sgcCrypto: Delphi 및 C++ Builder를 위한 새로운 암호화 라이브러리 | eSeGeCe Blog

sgcCrypto: Delphi 및 C++ Builder를 위한 새로운 암호화 라이브러리

· 컴포넌트
Delphi 및 C++ Builder용 sgcCrypto 암호화 라이브러리

sgcCrypto는 대칭 암호화, 해싱, 디지털 서명, PKI 및 포스트 양자 키 교환을 다루는 43개의 순수 Object Pascal 유닛으로 구성된, Delphi 및 C++ Builder를 위한 새로운 범용 암호화 라이브러리입니다. 디자인 타임 컴포넌트도 없고, Tsgc* 클래스도 없으며, 폼에 올려놓을 것도 없습니다. uses 절에 유닛을 추가하고 함수를 호출하면 됩니다. RTL 루틴을 호출하는 것과 같은 방식입니다.

sgcCrypto는 sgcWebSockets Standard, Professional, Enterprise에 무료로 포함되어 제공되므로, 이미 이러한 라이선스나 All-Access를 보유하고 있다면 별도로 설치하거나 주문할 필요 없이 바로 사용할 수 있습니다. 또한 Core만 보유했거나 sgcWebSockets 라이선스가 전혀 없는 고객을 위해, sgcWebSockets Core 런타임을 번들로 포함한 독립형 팩으로도 판매됩니다.

작동 방식

각 유닛은 TBytes를 입력받아 TBytes를 반환하는 평범한 함수와 프로시저를 익스포트합니다. 할당할 컨텍스트 객체도 없고, 구현할 인터페이스도 없으며, 등록할 것이 없으므로 sgcCrypto_Reg.pas도 없습니다. 모든 라이선스에는 전체 Pascal 소스가 포함되어 있어, 프리미티브가 DLL이나 OpenSSL 바인딩 속으로 사라지는 대신 여러분의 디버거에서 그대로 한 줄씩 실행됩니다.

이 라이브러리는 외부 라이브러리에 전혀 의존하지 않습니다. AES부터 포스트 양자 서명 방식에 이르기까지 모든 알고리즘이 이를 노출하는 유닛 안에 직접 구현되어 있으며, 동일한 소스가 Delphi 7부터 RAD Studio 13까지, Win32, Win64, Linux64, macOS, iOS, Android에서 수정 없이 그대로 컴파일됩니다.

uses
  sgcCrypto_Random, sgcCrypto_AES, sgcCrypto_Keccak, sgcCrypto_Ed25519,
  sgcCrypto_MLKEM;

var
  vKey, vIV, vPlain, vAAD, vTag, vCipher: TBytes;
  vDigest, vSeed, vSignature, vMessage: TBytes;
  vPublicKey, vPrivateKey, vSharedSecret, vCiphertext: TBytes;
begin
  // AES-256-GCM: authenticated encryption in one call
  vKey    := sgcRandomBytes(32);
  vIV     := sgcRandomBytes(12);
  vPlain  := TEncoding.UTF8.GetBytes('confidential payload');
  vCipher := sgcAES_GCM_Encrypt(vKey, vIV, vPlain, vAAD, vTag);

  // SHA-3-256, one call, no context object to manage
  vDigest := sgcSHA3_256(vPlain);

  // Ed25519: sign a message
  vSeed      := sgcRandomBytes(32);
  vMessage   := TEncoding.UTF8.GetBytes('sign me');
  vSignature := sgcEd25519_Sign(vSeed, vMessage);

  // ML-KEM-768: post-quantum key encapsulation (FIPS 203)
  sgcMLKEM_GenerateKeyPair(mlkem768, vPublicKey, vPrivateKey);
  sgcMLKEM_Encapsulate(mlkem768, vPublicKey, vCiphertext, vSharedSecret);
end;

대칭 암호화와 AEAD

sgcCrypto_AES는 CBC, GCM, CTR을 다룹니다. sgcCrypto_Modes는 ECB, OFB, CFB, 암호문 스틸링 방식인 CTS, 그리고 AES Key Wrap과 패딩이 있는 Key Wrap(RFC 3394 및 RFC 5649)을 추가하며, sgcCrypto_CMAC는 AES-CMAC입니다. sgcCrypto_ChaCha는 ChaCha20, XChaCha20, Salsa20, XSalsa20을 구현하고, sgcCrypto_Poly1305는 이들과 Poly1305를 결합하여 RFC 8439의 ChaCha20-Poly1305 및 XChaCha20-Poly1305 AEAD 암호를 만듭니다. GCM이든 Poly1305든 모든 인증 태그는 일정 시간 비교 방식으로 검증되므로, 검증에 실패해도 추측이 얼마나 가까웠는지 유출되지 않습니다.

해싱, 키 유도, MAC

sgcCrypto_SHA2sgcCrypto_Keccak는 SHA-1/2, SHA-3, SHAKE, cSHAKE, KMAC을 다루고, sgcCrypto_Blake2b/Blake2s는 BLAKE2를 추가합니다. sgcCrypto_HMAC는 키 기반 메시지 인증입니다. 비밀번호를 키로 변환하기 위해서는 sgcCrypto_KDF(PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt, 그리고 Password Hashing Competition 우승작인 Argon2의 세 가지 변형(d, i, id)을 모두 구현한 sgcCrypto_Argon2가 있습니다. sgcCrypto_SipHash는 해시 테이블 키를 위한 빠른 키 기반 해시를 제공하며, sgcCrypto_TLSH는 퍼지 유사도 해시로, 암호학적 다이제스트라기보다는 근사 중복 탐지에 유용합니다.

서명, 키 교환, PKI

sgcCrypto_Ed25519sgcCrypto_Ed448은 서명과 검증을 수행하고, sgcCrypto_X25519sgcCrypto_X448은 이에 대응하는 Diffie-Hellman 키 교환을 수행합니다. sgcCrypto_ECCurves는 secp256k1과 세 가지 Brainpool 곡선에 대해 RFC 6979 결정론적 nonce를 사용하는 ECDSA와 ECDH를 추가하며, sgcCrypto_RSA_Keys는 임의 비트 길이의 RSA 키 생성, OAEP 암호화, PSS 서명을 다룹니다.

PKI 측면에서는 sgcCrypto_X509가 인증서를 파싱하고, 주어진 발급자가 서명했는지 검증하며, 체인을 순회하며 검증하고, CRL을 통해 폐기 여부를 확인합니다. sgcCrypto_X509_Gen은 정확히 이 목적을 위해 만들어진 DER 라이터를 기반으로, 주체 대체 이름, 키 사용 용도, CA 경로 길이 제약을 포함한 자체 서명 X.509 인증서나 PKCS#10 CSR을 처음부터 생성합니다.

포스트 양자 암호화

sgcCrypto는 NIST의 세 가지 포스트 양자 표준도 구현합니다. sgcCrypto_MLKEM은 ML-KEM-512, 768, 1024의 세 가지 파라미터 세트 전체에 걸친 FIPS 203 키 캡슐화이며, 잘못된 형식의 암호문에 대해 암묵적 거부를 적용하여 잘못된 입력이 정보를 유출하지 않도록 합니다. sgcCrypto_MLDSA는 FIPS 204 서명(ML-DSA-44/65/87)이고, sgcCrypto_SLHDSA는 여섯 가지 SHAKE 파라미터 세트 전체에 걸친 FIPS 205입니다. 격자 기반 가정은 타원 곡선보다 역사가 짧기 때문에, sgcCrypto_MLKEM_Hybrid는 X25519 비밀 값과 ML-KEM 비밀 값을 결합해 하나의 공유 키로 만드는데, 이는 업계가 수렴하고 있는 하이브리드 마이그레이션 패턴입니다.

제공 방식

sgcCryptosgcWebSockets Standard, Professional, Enterprise 및 All-Access에 무료로 포함되어 제공됩니다. 이미 이러한 라이선스 중 하나를 보유하고 있다면 43개 유닛이 이미 설치 프로그램에 포함되어 있으며, 별도 주문이 필요 없습니다. sgcWebSockets Core만 보유했거나 sgcWebSockets 라이선스가 전혀 없다면, sgcCrypto는 Core 런타임이 번들로 포함된 독립형 팩으로도 판매됩니다. 포함형이든 독립형이든 모든 라이선스에는 전체 Pascal 소스 코드와 1년간의 업데이트가 제공됩니다.

전체 유닛 레퍼런스를 확인하고 직접 사용해 보려면 sgcCrypto 제품 페이지를 방문하세요.

질문이나 피드백이 있으신가요? 문의하기를 통해 연락 주시면, 직접 코드를 작성한 사람에게서 답변을 받으실 수 있습니다.