sgcCrypto 기능 매트릭스
디스크에 있는 43개 유닛 전체에 걸쳐 sgcCrypto가 하는 모든 일을 정리했습니다. 여기에는 컴포넌트도 디자인 타임 속성도 없습니다. 아래의 모든 행은 직접 호출하는 함수 또는 프로시저입니다. 전체 소스 코드는 모든 라이선스에 포함됩니다. 아래 앵커를 클릭하면 유닛들이 속한 6개의 기능 패밀리와, 같은 패키지가 그 위에 올린 TLS 1.3 및 TLS 1.2 엔진으로 이동합니다.
디스크에 있는 43개 유닛 전체에 걸쳐 sgcCrypto가 하는 모든 일을 정리했습니다. 여기에는 컴포넌트도 디자인 타임 속성도 없습니다. 아래의 모든 행은 직접 호출하는 함수 또는 프로시저입니다. 전체 소스 코드는 모든 라이선스에 포함됩니다. 아래 앵커를 클릭하면 유닛들이 속한 6개의 기능 패밀리와, 같은 패키지가 그 위에 올린 TLS 1.3 및 TLS 1.2 엔진으로 이동합니다.
sgcCrypto에는 컴포넌트가 없습니다. 아래의 43개 유닛은 평범한 함수를 내보냅니다. Tsgc* 클래스도, sgcCrypto_Reg.pas도 없습니다. uses 절에 유닛을 추가하고 함수를 호출하세요.
이미 포함되어 있습니다. sgcCrypto는 sgcWebSockets Standard, Professional, Enterprise, 그리고 All-Access 안에 무료로 포함되어 제공됩니다. Core만 보유한 고객을 위해 단독으로도 판매됩니다(sgcWebSockets Core 런타임 포함). 가격 안내를 참고하세요.
sgcWebSockets/delphi/Source/ 아래에 있는 모든 sgcCrypto_*.pas 유닛을 패밀리별로 정리했습니다.
| 유닛 | 패밀리 | 하는 일 |
|---|---|---|
sgcCrypto_AES | 대칭 | AES-CBC, AES-GCM(AEAD), AES-CTR. |
sgcCrypto_Modes | 대칭 | AES-ECB, OFB, CFB, CTS, CCM(AEAD), Key Wrap / 패딩 포함 Key Wrap, 그리고 7가지 패딩 방식. |
sgcCrypto_CMAC | 대칭 | AES-CMAC과 AES-GMAC 메시지 인증. |
sgcCrypto_ChaCha | 대칭 | ChaCha20, XChaCha20, Salsa20, XSalsa20. |
sgcCrypto_Poly1305 | 대칭 | Poly1305 MAC, ChaCha20-Poly1305 및 XChaCha20-Poly1305 AEAD. |
sgcCrypto_SHA2 | 해싱 & KDF | SHA-1, SHA-224, SHA-256, SHA-384, SHA-512. |
sgcCrypto_Keccak | 해싱 & KDF | SHA-3, SHAKE128/256, cSHAKE, KMAC. |
sgcCrypto_Blake2b | 해싱 & KDF | BLAKE2b, 키 사용 여부 선택 가능. |
sgcCrypto_Blake2s | 해싱 & KDF | BLAKE2s, 키 사용 여부 선택 가능. |
sgcCrypto_HMAC | 해싱 & KDF | HMAC-SHA1/256/384/512. |
sgcCrypto_KDF | 해싱 & KDF | PBKDF2, KDF1, KDF2, X9.63, 해시 선택 가능. |
sgcCrypto_HKDF | 해싱 & KDF | HKDF extract-and-expand. |
sgcCrypto_Scrypt | 해싱 & KDF | scrypt 메모리 하드 KDF. |
sgcCrypto_Argon2 | 해싱 & KDF | Argon2d, Argon2i, Argon2id. |
sgcCrypto_SipHash | 해싱 & KDF | SipHash-2-4 키 기반 해시. |
sgcCrypto_TLSH | 해싱 & KDF | TLSH 퍼지 해시와 유사도 차이 계산. |
sgcCrypto_Ed25519 | 서명 & 키 교환 | Ed25519 서명 / 검증. |
sgcCrypto_X25519 | 서명 & 키 교환 | X25519 Diffie-Hellman. |
sgcCrypto_Ed448 | 서명 & 키 교환 | Ed448 서명 / 검증. |
sgcCrypto_X448 | 서명 & 키 교환 | X448 Diffie-Hellman. |
sgcCrypto_GF448 | 서명 & 키 교환 | Ed448/X448을 위한 내부 GF(2^448-2^224-1) 필드 연산. |
sgcCrypto_ECCurves | 서명 & 키 교환 | secp256k1, Brainpool P256r1/P384r1/P512r1, NIST P-256/P-384/P-521 위의 ECDSA / ECDH, DER 서명, 키 내보내기/가져오기, 그리고 BIP-340 Schnorr. |
sgcCrypto_EC | 서명 & 키 교환 | JWS(ES256/384/512)로서의 일반 EC 서명/검증, ECDH. |
sgcCrypto_RSA | 서명 & 키 교환 | RSA PKCS#1 v1.5 서명, PKCS#1 v1.5 / PSS 검증, PEM 또는 원시 값으로부터. |
sgcCrypto_RSA_Keys | 서명 & 키 교환 | RSA 키 생성, OAEP(독립적인 MGF1 해시 지정 가능), PSS, PKCS#1 v1.5 서명/검증/암호화/복호화, PKCS#1 및 PKCS#8 DER/PEM 내보내기 및 가져오기. |
sgcCrypto_ECIES | 서명 & 키 교환 | X25519 위의 ECIES seal / open 하이브리드 암호화. |
sgcCrypto_ASN1 | PKI | DER 리더, PEM 코덱, PKCS#1/SEC 1 키 파싱. |
sgcCrypto_DER | PKI | DER 라이터 기본 요소. |
sgcCrypto_BigInteger | PKI | 내부 임의 정밀도 정수 연산. |
sgcCrypto_X509 | PKI | X.509 파싱, 검증, pathLenConstraint와 nameConstraints를 적용한 체인 검증, CSR 검증, CRL, 폐기 확인. RSA, EC, Ed25519, ML-DSA, SLH-DSA, ML-KEM 공개 키를 읽습니다. |
sgcCrypto_X509_Gen | PKI | 자체 서명 인증서, CA 발급 인증서, PKCS#10 CSR 생성. RSA, EC, ML-DSA 또는 SLH-DSA 서명, URI 및 IPv6 주체 대체 이름과 nameConstraints 포함. |
sgcCrypto_MLKEM | 포스트 퀀텀 | ML-KEM 키 캡슐화(FIPS 203), 매개변수 집합 3종. SubjectPublicKeyInfo, PKCS#8, PEM 키 가져오기 및 내보내기 지원. |
sgcCrypto_MLKEM_Poly | 포스트 퀀텀 | ML-KEM 뒤에 있는 내부 다항식 환 연산. |
sgcCrypto_MLKEM_Hybrid | 포스트 퀀텀 | 하이브리드 X25519 + ML-KEM 키 캡슐화, X-Wing, 그리고 RFC 10024 TLS 1.3 하이브리드 키 셰어. |
sgcCrypto_MLDSA | 포스트 퀀텀 | ML-DSA 전자 서명(FIPS 204), 매개변수 집합 3종. SubjectPublicKeyInfo, PKCS#8, PEM 키 가져오기 및 내보내기 지원. |
sgcCrypto_MLDSA_Poly | 포스트 퀀텀 | ML-DSA 뒤에 있는 내부 다항식 환 연산. |
sgcCrypto_SLHDSA | 포스트 퀀텀 | SLH-DSA 서명(FIPS 205), SHAKE 매개변수 집합 6종. SubjectPublicKeyInfo, PKCS#8, PEM 키 가져오기 및 내보내기 지원. |
sgcCrypto_OTP | OTP & 기타 | HOTP, TOTP, 상수 시간 검증 윈도우. |
sgcCrypto_Encoding | OTP & 기타 | 상수 시간 비교, 안전한 초기화, hex/Base64url/Base32. |
sgcCrypto_Zip_AE2 | OTP & 기타 | ZIP 항목용 WinZip AES 암호화, AE-1 / AE-2. |
sgcCrypto_Legacy | OTP & 기타 | MD4, MD5, HMAC-MD5, DES-ECB, RIPEMD-160, HMAC-RIPEMD160, 상호운용 전용. |
sgcCrypto_Random | OTP & 기타 | 크로스 플랫폼 CSPRNG. |
sgcCrypto_Int64 | OTP & 기타 | Delphi 7을 위한 내부 64비트 정수 에뮬레이션. |
운영 코드가 실제로 사용하는 모드의 AES와, ChaCha20/Poly1305 AEAD 계열입니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| AES-CBC | sgcAES_CBC_Encrypt / sgcAES_CBC_Decrypt | PKCS#7 패딩, 16바이트 IV. 키 길이가 암호를 결정합니다: 16/24/32바이트 = AES-128/192/256. |
| 패딩 없는 AES-CBC | sgcAES_CBC_Encrypt_NoPad / sgcAES_CBC_Decrypt_NoPad | Java가 AES/CBC/NoPadding으로 표기하는 모드입니다. 입력은 이미 16바이트의 배수여야 하며, 정렬되지 않은 입력은 상대방이 읽을 수 없는 것으로 조용히 패딩되는 대신 예외를 일으킵니다. |
| AES-GCM(AEAD) | sgcAES_GCM_Encrypt / sgcAES_GCM_Decrypt | 12바이트 IV를 권장합니다. 16바이트 태그를 상수 시간으로 비교하며, 태그 검증에 실패하면 복호화는 False와 빈 평문을 반환합니다. |
| AES 코어 | sgcAES_GetCore / sgcAES_SetCore | aescConstantTime이 기본값이며, 비밀 바이트로 메모리를 인덱싱하거나 분기하지 않는 비트슬라이스 코어로, 키와 평문에 대한 캐시 타이밍 채널을 막아 줍니다. aescTable은 고전적인 테이블 코어로, 데이터 캐시를 통해 정보가 새고 모든 측정에서 더 느렸기 때문에 폴백으로만 남겨 두었습니다. GCM을 인증하는 GHASH는 키로 분기하는 대신 마스크 아래에서 곱셈을 수행합니다. 코어는 시작할 때 한 번, 어떤 워커 스레드가 실행되기 전에 설정하세요. |
| AES-CCM(AEAD) | sgcAES_CCM_Encrypt / sgcAES_CCM_Decrypt | 제약된 환경과 IoT 스택, 즉 Zigbee, 802.15.4, Bluetooth, TLS CCM 스위트가 지정하는 AEAD로, 블록 암호만 필요할 뿐 GHASH 테이블이 필요 없습니다. 논스는 7~13바이트, 태그는 4~16바이트이며 상수 시간으로 검증됩니다. |
| AES-CTR | sgcAES_CTR | SRTP 방식의 AES-CM(RFC 3711). 대칭 호출, 패딩 없음, 128비트 빅 엔디언 카운터. |
| AES-ECB | sgcAES_ECB_Encrypt / sgcAES_ECB_Decrypt | IV도 체이닝도 없습니다. 이를 지정하는 형식과의 상호운용을 위해 포함되어 있습니다. |
| 패딩 방식 | sgcPad_Add / sgcPad_Remove, sgcAES_CBC_EncryptPad / DecryptPad, sgcAES_ECB_EncryptPad / DecryptPad | TsgcPadding은 None, PKCS#7, Zero, ANSI X9.23, ISO 7816-4, ISO 10126-2, TBC를 다루므로, CBC와 ECB는 PKCS#7을 선택하지 않은 시스템의 데이터도 읽고 쓸 수 있습니다. sgcPad_Remove는 잘못된 패딩이라면 그 종류에 관계없이 동일한 경로로 False를 반환합니다. |
| AES-OFB / AES-CFB | sgcAES_OFB, sgcAES_CFB_Encrypt / sgcAES_CFB_Decrypt | 스트림 암호 방식의 피드백 모드입니다. |
| AES-CTS | sgcAES_CTS_Encrypt / sgcAES_CTS_Decrypt | 사이퍼텍스트 스틸링: 블록 크기의 배수가 아닌 데이터를 패딩 오버헤드 없이 암호화합니다. |
| AES Key Wrap | sgcAES_KeyWrap / sgcAES_KeyUnwrap | RFC 3394. 한 키를 다른 키로 감쌀 때 사용합니다. |
| AES Key Wrap with Padding | sgcAES_KeyWrapPad / sgcAES_KeyUnwrapPad | RFC 5649. 8바이트의 배수가 아닌 키 자료를 위한 것입니다. |
| AES-CMAC | sgcAES_CMAC / sgcAES_CMAC_Verify | RFC 4493 메시지 인증 코드입니다. |
| AES-GMAC | sgcAES_GMAC / sgcAES_GMAC_Verify | GCM의 인증 전용 모드입니다: 전체 메시지가 추가 데이터로 전달되며 아무것도 암호화되지 않습니다. IV는 같은 키로 절대 반복되어서는 안 되며, 16바이트 태그는 상수 시간으로 비교됩니다. |
| 저수준 블록 기본 요소 | sgcAES_ExpandKey, sgcAES_EncryptBlock, sgcAES_DecryptBlock | 위의 모드 및 MAC 유닛을 위해 노출되어 있습니다. 아직 제공되지 않는 모드를 직접 구축할 때만 사용하세요. |
| ChaCha20 | sgcChaCha20 | RFC 8439, 96비트 논스, 32비트 카운터. |
| XChaCha20 | sgcXChaCha20 | 192비트 확장 논스로, 대규모로 무작위 논스를 생성해도 안전합니다. |
| Salsa20 / XSalsa20 | sgcSalsa20 / sgcXSalsa20 | 이전 세대 스트림 암호 계열이며, 두 논스 크기 모두 지원합니다. |
| 서브키 유도 | sgcHChaCha20 / sgcHSalsa20 | X 변형이 논스의 처음 16바이트로부터 서브키를 유도할 때 내부적으로 사용하는 함수입니다. |
| Poly1305 MAC | sgcPoly1305 / sgcPoly1305_Verify | 일회용 인증자, RFC 8439. Poly1305 키는 절대 재사용하지 마세요. |
| ChaCha20-Poly1305 AEAD | sgcChaCha20Poly1305_Encrypt / _Decrypt | TLS 1.3의 두 번째 암호 스위트와 SSH 뒤에 있는 AEAD 암호입니다. |
| XChaCha20-Poly1305 AEAD | sgcXChaCha20Poly1305_Encrypt / _Decrypt | 동일한 AEAD이며 192비트 논스를 사용합니다. libsodium이 crypto_aead_xchacha20poly1305_ietf라고 부르는 구성입니다. |
모든 주요 해시 계열과, PBKDF2, HKDF, scrypt, 그리고 Argon2의 세 가지 변형 전부입니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| SHA-1 / SHA-2 | sgcSHA1, sgcSHA224, sgcSHA256, sgcSHA384, sgcSHA512 | FIPS 180-4. SHA-1은 상호운용을 위해 유지되며, 새로운 서명에는 권장하지 않습니다. |
| SHA-3 | sgcSHA3_224 / _256 / _384 / _512 | FIPS 202, Keccak 스펀지이며 구조적으로 SHA-2와 독립적입니다. |
| SHAKE128 / SHAKE256 | sgcSHAKE128 / sgcSHAKE256 | 가변 출력 길이 함수입니다: 원하는 다이제스트 길이를 요청할 수 있습니다. |
| cSHAKE128 / cSHAKE256 | sgcCSHAKE128 / sgcCSHAKE256 | 도메인 분리된 SHAKE, NIST SP 800-185, KMAC의 기반입니다. |
| KMAC128 / KMAC256 | sgcKMAC128 / sgcKMAC256 | 가변 출력 길이를 갖는 Keccak 기반 MAC입니다. |
| BLAKE2b | sgcBlake2b / sgcBlake2b_Keyed | RFC 7693, 최대 64바이트 다이제스트, 내장 키잉(별도의 HMAC 불필요). |
| BLAKE2s | sgcBlake2s / sgcBlake2s_Keyed | RFC 7693, 최대 32바이트 다이제스트, 32비트 플랫폼에 최적화. |
| 스트리밍 다이제스트 | sgcBlake2b_Init/_Update/_Final, Keccak/Blake2s의 동일한 호출 | 한 번에 메모리에 담을 수 없을 만큼 큰 데이터를 해싱할 때 사용합니다. |
| HMAC | sgcHMAC_SHA1 / _SHA256 / _SHA384 / _SHA512 | RFC 2104, SHA-1/2 계열 위의 키 기반 해싱입니다. |
| RIPEMD-160 / HMAC-RIPEMD160 | sgcRIPEMD160, sgcHMAC_RIPEMD160 | ISO/IEC 10118-3와 RFC 2286입니다. Bitcoin 주소가 SHA-256 위에 계층화하는 160비트 다이제스트이며, OpenPGP가 이름으로 지정하는 것이기도 합니다. |
| PBKDF2 | sgcPBKDF2, sgcPBKDF2_SHA1 / _SHA256 / _SHA512 | RFC 8018. 메모리 하드성이 약하므로, 선택할 수 있다면 Argon2id나 scrypt를 우선하세요. |
| HKDF | sgcHKDF_Extract_SHA256 / _SHA384, sgcHKDF_Expand_SHA256 / _SHA384, sgcHKDF_SHA256 / _SHA384 | RFC 5869, extract-then-expand 키 유도이며, 공유 비밀을 여러 키로 바꾸는 표준적인 방법입니다. |
| KDF1 / KDF2 / X9.63 | sgcKDF1, sgcKDF2, sgcKDF_X963 | ISO 18033-2, IEEE 1363a, ANSI X9.63이 정의하는 카운터 모드 유도 방식으로, RSA-KEM과 ECIES가 이름으로 지정하는 것입니다. KDF1은 0부터, KDF2는 1부터 카운트하며, 이 차이가 실제 상호운용성 버그를 일으킨 적이 있으므로 스펙이 어느 쪽을 의미하는지 확인하세요. |
| scrypt | sgcScrypt | RFC 7914, 메모리 하드 방식으로 PBKDF2보다 GPU/ASIC 공격에 훨씬 강합니다. |
| Argon2 | sgcArgon2(d / i / id), 편의 래퍼 sgcArgon2id | RFC 9106, Password Hashing Competition 우승작. 선택적 비밀 값(페퍼)과 연관 데이터를 포함하는 전체 인터페이스입니다. |
| SipHash-2-4 | sgcSipHash24 / sgcSipHash24_Value | 해시 테이블 키를 위한 빠른 키 기반 PRF로, 해시 플러딩 서비스 거부 공격에 강합니다. |
| TLSH 퍼지 해시 | sgcTLSH, sgcTLSH_Init/_Update/_Final | 근접 중복 탐지를 위한 로컬리티 민감 해시이며, 암호화 다이제스트가 아닙니다. |
| TLSH 유사도 점수 | sgcTLSH_Diff | 두 TLSH 다이제스트 사이의 거리입니다. 값이 낮을수록 더 유사합니다. |
RSA를 포함해 서로 다른 다섯 개의 곡선 계열에 걸쳐 서명, 검증, 공유 비밀 유도를 수행합니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| Ed25519 서명 / 검증 | sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKey | RFC 8032. 32바이트 공개 키, 64바이트 서명. 검증은 5.1.7절에 따라 비정규 점과 S >= L을 거부합니다. 서명은 비밀 스칼라와 메시지별 논스에 대해 상수 시간으로 이루어집니다. 고정된 4비트 윈도우를 사용하고, 테이블 항목은 16개 전부를 마스크 아래에서 스캔하여 선택하며, 5.1.4절의 완전 덧셈 공식을 사용합니다. 공개 키는 32바이트 시드에서 만들어집니다. |
| X25519 키 교환 | sgcX25519, sgcX25519_PublicKey, sgcX25519_SharedSecret | Curve25519 위의 RFC 7748 Diffie-Hellman. |
| Ed448 서명 / 검증 | sgcEd448_GenerateKeyPair, sgcEd448_Sign, sgcEd448_Verify | RFC 8032, 448비트(Goldilocks) EdDSA 곡선입니다. |
| X448 키 교환 | sgcX448, sgcX448_PublicKey, sgcX448_SharedSecret | Curve448 위의 RFC 7748 Diffie-Hellman. |
| secp256k1 | eccSecp256k1과 함께 사용하는 sgcECDSA_SignHash / VerifyHash | sgcCrypto_ECCurves 안의 Bitcoin/Ethereum 곡선, SEC 2입니다. |
| Brainpool P256r1 / P384r1 / P512r1 | eccBrainpoolP256r1 / P384r1 / P512r1과 함께 사용하는 동일 함수 | RFC 5639, EU eIDAS 및 정부 프로필에서 흔히 사용됩니다. |
| NIST P-256 / P-384 / P-521 | eccP256 / eccP384 / eccP521과 함께 사용하는 동일 함수 | TsgcECCurve가 이제 일곱 개의 곡선을 명명하므로, 키 생성, 서명, 검증, ECDH, 점 압축 모두 PEM 파일이 아니라 원시 키 바이트로부터 곧바로 NIST 소수 곡선에 도달합니다. |
| 결정적 ECDSA 논스 | sgcECDSA_SignHash에 내장 | RFC 6979: 논스가 개인 키와 메시지로부터 유도되므로 RNG 실패 상황이 없습니다. |
| 상수 시간 스칼라 곱셈 | sgcECDSA_SignHash, sgcECDH_SharedSecret 및 EC 키 생성 내부 | sgcCrypto_ECCurves의 모든 곡선이 동일한 엔진을 실행합니다. 데이터에 의존하는 단계가 없는 Montgomery 리덕션, 개수가 곡선에서 정해지는 고정 윈도우, 모든 항목을 마스크 아래에서 스캔하여 선택하는 테이블, 어떤 경우에 해당하는지 판단하려고 좌표를 들여다보지 않는 완전 덧셈 공식입니다. sgcCrypto_EC의 JOSE, WebAuthn, E2EE 경로도 같은 코드를 실행합니다. |
| ECDH(secp256k1 / Brainpool) | sgcECDH_SharedSecret | 동일한 네 곡선 위에서의 공유 비밀입니다. |
| 점 압축 | sgcEC_Compress / sgcEC_Decompress | 더 짧은 압축 공개 키 형식을 저장하거나 전송합니다. |
| JWS로서의 EC(ES256/384/512) | sgcECDSA_SignJWS / sgcECDSA_VerifyJWS | 요청된 비트 길이에 따라 곡선이 자동으로 선택되며, PEM 키로부터 직접 서명/검증합니다. ECCurves의 JOSE 지향 자매 유닛입니다. |
| 범용 ECDH | sgcECDH | 원시 개인 키와 상대방 공개 점으로부터 공유 비밀을 구합니다. |
| 원시 / DER ECDSA 검증 | sgcECDSA_VerifyRaw / sgcECDSA_VerifyDER | 원시 (Qx, Qy, r, s) 튜플 또는 DER 인코딩된 서명에 대해 검증합니다. |
| DER ECDSA 서명 & 변환 | sgcECDSA_SignDER / sgcECDSA_VerifyDER, sgcECDSA_RawToDER / sgcECDSA_DERToRaw | X.509, CMS, TLS는 r 다음에 s가 오는 INTEGER의 SEQUENCE인 DER ECDSA-Sig-Value를 사용합니다. JOSE와 WebAuthn은 대신 원시 R || S 쌍을 사용합니다. 곧바로 어느 형태로든 서명하거나, 기존 서명을 두 형태 사이에서 변환할 수 있습니다. |
| Schnorr 서명(BIP-340) | sgcSchnorr_PublicKey, sgcSchnorr_Sign, sgcSchnorr_Verify | secp256k1 전용이며, x-only 32바이트 공개 키와 64바이트 서명을 사용합니다: Taproot, Nostr, Lightning이 사용하는 방식입니다. sgcSchnorr_TaggedHash는 BIP-341과 BIP-342 태그를 같은 구성 위에 만들 수 있도록 노출되어 있습니다. |
| RSA 서명(PKCS#1 v1.5) | sgcRSA_SignPKCS1 | PEM 개인 키로부터, SHA-1/256/384/512 다이제스트. |
| RSA 개인 키 연산 | sgcRSA_SignPKCS1 및 sgcCrypto_RSA_Keys의 나머지 서명과 복호화 호출 | 각 연산은 새로운 무작위 쌍으로 블라인딩되고, 고정 윈도우 거듭제곱과 타이밍이 인수나 데이터에 의존하지 않는 CRT 재결합을 거치며, 결과를 반환하기 전에 공개 지수와 대조해 검사됩니다. CRT 한쪽 절반에 오류가 생기면 서명 한 번만으로 인수가 드러나므로, 불일치할 경우 아무것도 반환되지 않습니다. |
| RSA 검증(PKCS#1 v1.5 / PSS) | sgcRSA_VerifyPKCS1, sgcRSA_VerifyPSS, 그리고 모듈러스/지수 기반의 _Raw 변형 | RFC 8017. PEM 키 또는 원시 모듈러스와 지수로부터 검증하며, 별도의 키 객체 구성이 필요 없습니다. |
| RSA 키 생성 | sgcRSA_GenerateKey | 원하는 비트 길이, Miller-Rabin 소수성 검사. |
| RSA-OAEP 암호화 | sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | RFC 8017의 최적 비대칭 암호화 패딩입니다. |
| 독립적인 MGF1 해시를 사용하는 RSA-OAEP | 다섯 매개변수 sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt 오버로드 | 레이블 해시와 MGF1 해시를 별도로 고정합니다. OAEPWithSHA256AndMGF1Padding은 Bouncy Castle에서는 둘 다 SHA-256을 의미하지만 SunJCE에서는 SHA-256과 MGF1-SHA1을 의미하며, 이 불일치가 Java 상호운용이 실패하는 일반적인 원인입니다. |
| RSA PKCS#1 v1.5 암호화 | sgcRSA_PKCS1_Encrypt / sgcRSA_PKCS1_Decrypt | RFC 8017 7.2절로, Java가 RSA/ECB/PKCS1Padding이라 부르는 모드입니다. 복호화는 모든 실패에 대해 동일한 경로를 거치므로 패딩 오라클에 아무것도 내주지 않습니다. 새로운 용도로는 OAEP를 선호하세요. |
| RSA-PSS / PKCS#1 서명 | sgcRSA_PSS_Sign / Verify, sgcRSA_PKCS1_Sign / Verify | 생성된 TsgcRSAPrivateKey로부터 직접 서명합니다. |
| RSA 키 내보내기 | sgcRSA_ExportPrivateKeyPEM, sgcRSA_ExportPublicKeyPEM, 그리고 대응하는 DER 호출 | PKCS#1 및 SubjectPublicKeyInfo 인코딩입니다. |
| PKCS#8 및 SEC 1 키 내보내기 | sgcRSA_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeyPKCS8DER / PKCS8PEM, sgcEC_ExportPrivateKeySEC1DER / SEC1PEM, sgcEC_ExportSubjectPublicKeyInfo, sgcEC_ExportPublicKeyPEM | Java, .NET, 그리고 대부분의 최신 도구가 기대하는 BEGIN PRIVATE KEY 컨테이너와, SEC 1 BEGIN EC PRIVATE KEY 형태, 그리고 인증서에 들어가는 SubjectPublicKeyInfo까지 다룹니다. 암호화되어 있지 않으므로 결과물은 있는 그대로의 키 자료입니다. |
| RSA 및 EC 키 가져오기 | sgcRSA_ImportPrivateKeyDER / PEM, sgcRSA_ImportPublicKeyDER / PEM, sgcEC_ImportPrivateKeyDER / PEM, sgcEC_ImportPublicKeyDER / PEM | 이전에는 존재하지 않았던 기능입니다: 생성한 키를 파일로 쓸 수는 있어도 다시 읽어들일 수는 없었습니다. 가져오기는 PKCS#1, PKCS#8, SEC 1, SubjectPublicKeyInfo를 DER 또는 PEM으로 받아들이며, 파일에 없는 경우 CRT 매개변수나 공개 점을 다시 계산하고, 잘못된 입력에는 예외 대신 False를 반환하므로 신뢰할 수 없는 파일에도 안전하게 사용할 수 있습니다. |
| ECIES seal / open | sgcECIES_GenerateKeyPair, sgcECIES_Seal, sgcECIES_Open | X25519 공개 키에 대한 하이브리드 암호화입니다. 임시 ECDH와 AEAD를 결합해 각 방향마다 한 번의 호출로 처리합니다. |
다른 사람이 발급한 인증서를 읽거나, 직접 생성할 수 있으며, 두 경우 모두 아래에 DER 인코더와 디코더가 있습니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| DER 리더 | sgcASN1_Read, sgcASN1_Next, sgcASN1_Content | DER 구조를 노드 단위로 순회합니다. |
| 엄격한 DER | sgcASN1_Read, sgcASN1_IsMinimalUnsignedInteger | 이 유닛이 읽는 모든 구조는 규격상 DER이므로 길이에도 DER 규칙이 적용됩니다. 부정 길이 형식은 거부되고, 짧은 형식으로 표현할 수 있는 길이의 긴 형식도 거부됩니다. INTEGER가 최소 형태로 인코딩되지 않은 ECDSA 서명도 거부되므로, 하나의 서명을 두 가지 방식으로 쓰고 서로 다른 두 값으로 받아들이는 일이 없습니다. |
| PEM 코덱 | sgcPEM_Decode / sgcPEM_Encode | RFC 7468, DER을 감싸는 -----BEGIN ... -----END 래퍼입니다. |
| RSA 키 파싱 | sgcASN1_ParseRSAPrivateKey / PublicKey | PKCS#1(RFC 8017) 키 구조입니다. |
| EC 키 파싱 | sgcASN1_ParseECPrivateKey / PublicKey | SEC 1 키 구조입니다. |
| DER 라이터, 구조체 | sgcDER_Sequence, sgcDER_Set, sgcDER_Tagged, sgcDER_ContextExplicit / Implicit | 모든 인증서 필드가 조립되는 빌딩 블록입니다. |
| DER 라이터, 값 | sgcDER_Integer, sgcDER_OctetString, sgcDER_BitString, sgcDER_Boolean, sgcDER_Null | 기본 값 인코더입니다. |
| DER 라이터, 문자열 & 식별자 | sgcDER_OID, sgcDER_UTF8String, sgcDER_PrintableString, sgcDER_IA5String, sgcDER_Time | 객체 식별자, X.509가 사용하는 세 가지 문자열 타입, 그리고 UTCTime/GeneralizedTime입니다. |
| 인증서 파싱 | sgcX509_Parse | 전체 인증서 구조입니다: 주체, 발급자, 유효 기간, 공개 키, 확장. |
| 서명 / 체인 검증 | sgcX509_VerifySignedBy, sgcX509_VerifyChain | 인증서 하나를 발급자에 대해 검증하거나, DER 인증서 배열을 따라가며 검증합니다. |
| CRL 파싱 & 폐기 확인 | sgcX509_CRL_Parse, sgcX509_IsRevoked, sgcX509_CRL_VerifySignedBy | 인증서 폐기 목록(CRL)을 파싱하고 일련번호를 대조합니다. |
| 이름 형식화 | sgcX509_SubjectRFC2253, sgcX509_IssuerRFC2253, sgcX509_SubjectOneLine | 로깅과 화면 표시를 위한 RFC 2253 구분 이름 문자열입니다. |
| 확장 & SAN | sgcX509_GetExtension, sgcX509_GetCRLDistributionURIs | 임의의 확장 OID와 CRL 배포 지점 URI를 읽습니다. |
| 자체 서명 인증서 생성 | sgcX509_CreateSelfSigned | 전체 TsgcX509Options: 주체 DN, 유효 기간, 일련번호, 경로 길이 제약이 있는 CA 플래그, 키 사용, 확장 키 사용, 주체 대체 이름(IPv4 SAN 포함). |
| URI 주체 대체 이름 | TsgcX509Options.URIs | uniformResourceIdentifier SAN으로, 호스트 이름이 아니라 SPIFFE 스타일의 서비스 신원을 위한 것입니다. 값은 IA5String 내용으로 그대로 기록되므로 완전한 URI를 전달하세요. |
| PKCS#10 CSR 생성 | sgcX509_CreateCSR | 동일한 옵션 레코드로부터 만드는 RFC 2986 인증서 서명 요청입니다. |
| EC 서명 인증서 & CSR | sgcX509_CreateSelfSignedEx, sgcX509_CreateCSREx, sgcX509_ECKey, sgcX509_RSAKey | 어느 한 종류의 키든 TsgcX509SignKey로 감싸서 RSA뿐 아니라 EC 키로도 서명할 수 있습니다. EC 인증서는 RSA 인증서의 대략 3분의 1 크기이며 검증 속도도 훨씬 빠릅니다. TsgcX509Options.Hash는 여전히 SHA만 지정하며, 알고리즘은 키를 따라가므로 rhSHA256은 EC 키에서는 ecdsa-with-SHA256을 의미합니다. |
| CA 발급 | sgcX509_CreateSigned, sgcX509_CreateSignedFromCSR | 옵션 레코드에서든 파싱된 PKCS#10 요청에서든, CA 키로 서명된 인증서를 발급합니다. |
| 포스트 퀀텀 서명 키 | sgcX509_MLDSAKey, sgcX509_SLHDSAKey | ML-DSA 또는 SLH-DSA 키를 TsgcX509SignKey로 감싸 sgcX509_CreateSelfSignedEx, sgcX509_CreateCSREx 또는 CA 발급 함수에 넘깁니다. ML-DSA는 RFC 9881, SLH-DSA는 RFC 9909입니다. |
| ML-KEM 인증서 | ML-KEM 주체 키를 사용하는 sgcX509_CreateSigned | RFC 9935. CA는 ML-KEM 공개 키를 인증할 수 있습니다. ML-KEM은 서명을 할 수 없으므로, 인증서를 발급하기 전에 키 소유를 다른 방법으로 증명해야 합니다. |
| 읽기 시 포스트 퀀텀 키 타입 | TsgcX509PublicKeyType | x509pkRSA, x509pkEC, x509pkEd25519와 나란히 x509pkMLDSA, x509pkSLHDSA, x509pkMLKEM이 추가되었습니다. sgcX509_Parse, sgcX509_VerifySignedBy, sgcX509_CSR_Verify 모두 이들을 처리합니다. |
| 체인 제약 | sgcX509_VerifyChain | basicConstraints의 pathLenConstraint와 nameConstraints 확장을 dNSName, iPAddress, rfc822Name, uniformResourceIdentifier, directoryName에 걸쳐 강제합니다. |
| 생성 시 nameConstraints | TsgcX509Options.PermittedDNSNames, ExcludedDNSNames, PermittedIPRanges, ExcludedIPRanges | 허용 및 제외 서브트리를 CA 인증서에 기록하므로, 위의 체인 검증기가 이를 강제할 수 있습니다. |
| IPv6 주소 SAN | TsgcX509Options.IPAddresses | IPv4는 물론, RFC 4291의 모든 텍스트 표기 형식으로 IPv6를 받습니다. |
| PEM 출력 | sgcX509_ToPEM | 생성된 DER을 바로 저장 가능한 PEM 파일로 감쌉니다. |
NIST가 2024년 8월 FIPS 203, 204, 205로 확정한 세 가지 알고리즘과, 전환기를 위한 하이브리드 결합기입니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| ML-KEM 키 생성 | sgcMLKEM_GenerateKeyPair, sgcMLKEM_GenerateKeyPairFromSeed | FIPS 203, 이전 명칭 Kyber. 세 가지 매개변수 집합: mlkem512, mlkem768, mlkem1024. |
| ML-KEM 캡슐화 | sgcMLKEM_Encapsulate, sgcMLKEM_EncapsulateWithSeed | 새로운 32바이트 공유 비밀과 이를 담는 암호문을 생성합니다. 공개 키는 먼저 FIPS 203 7.2절의 입력 검사를 거치므로, 길이가 잘못되었거나 모듈러스 검사에 실패하는 키는 예외를 발생시킵니다. |
| ML-KEM 디캡슐화 | sgcMLKEM_Decapsulate | 길이가 올바르지만 복호화되지 않는 암호문은 오류 대신 의사난수 비밀(암묵적 거부)을 생성하므로, 타이밍과 오류 동작 어느 쪽으로도 정보가 드러나지 않습니다. 길이가 잘못된 암호문이나 개인 키, 해시 검사에 실패하는 개인 키는 FIPS 203 7.3절의 입력 검사에 따라 먼저 예외를 발생시킵니다. |
| ML-KEM 크기 | sgcMLKEM_PublicKeySize, PrivateKeySize, CiphertextSize, SharedSecretSize | 버퍼 크기 산정을 위한 매개변수 집합별 바이트 길이입니다. |
| 하이브리드 X25519 + ML-KEM | sgcHybrid_GenerateKeyPair, sgcHybrid_Encapsulate, sgcHybrid_Decapsulate | KDF를 통해 고전적 공유 비밀과 포스트 퀀텀 공유 비밀을 결합해, 결과가 X25519 단독보다 약해지지 않도록 합니다. 오늘날 ML-KEM을 배포하는 권장 방식입니다. |
| ML-DSA 키 생성 | sgcMLDSA_GenerateKeyPair, sgcMLDSA_GenerateKeyPairFromSeed | FIPS 204, 이전 명칭 Dilithium. 세 가지 매개변수 집합: mldsa44, mldsa65, mldsa87. |
| ML-DSA 서명 / 검증 | sgcMLDSA_Sign / sgcMLDSA_Verify | FIPS 204 인터페이스에 따른 결정적 또는 무작위 서명이며, 컨텍스트 문자열을 포함합니다. |
| ML-DSA 크기 | sgcMLDSA_PublicKeySize, PrivateKeySize, SignatureSize | 매개변수 집합별 바이트 길이입니다. |
| SLH-DSA 키 생성 | sgcSLHDSA_GenerateKeyPair, sgcSLHDSA_GenerateKeyPairFromSeed | FIPS 205, 이전 명칭 SPHINCS+. 상태 비저장 해시 기반 서명으로, 안전성이 격자나 곡선 가정이 아니라 해시 함수에만 의존합니다. |
| SLH-DSA 서명 / 검증 | sgcSLHDSA_Sign / sgcSLHDSA_Verify | SHAKE 매개변수 집합 6종: slhShake128s, slhShake128f, slhShake192s, slhShake192f, slhShake256s, slhShake256f. s 집합은 작은 서명을, f 집합은 빠른 서명을 우선합니다. |
| SLH-DSA 크기 & 명명 | sgcSLHDSA_PublicKeySize, PrivateKeySize, SignatureSize, sgcSLHDSA_ParamsName | SLH-DSA 서명은 집합에 따라 7.8KB에서 49KB까지 큽니다. 서명 전에 버퍼 크기를 맞추세요. |
| 공개 키 내보내기 & 가져오기, DER | sgcMLDSA_ExportSubjectPublicKeyInfo / ImportSubjectPublicKeyInfo, 그리고 동일한 sgcMLKEM_* 및 sgcSLHDSA_* 쌍 | X.509 SubjectPublicKeyInfo이므로, 포스트 퀀텀 공개 키가 RSA나 EC 공개 키와 같은 구조에 들어갑니다. RFC 9881, RFC 9909, RFC 9935입니다. |
| 개인 키 내보내기 & 가져오기, DER | sgcMLDSA_ExportPrivateKeyInfo / ImportPrivateKeyInfo 및 sgcMLKEM_*, sgcSLHDSA_* 쌍 | PKCS#8 OneAsymmetricKey, 버전 0과 1. 가져오기는 키의 일관성을 검사합니다. 내장된 공개 키가 일치하지 않으면 거부되고, 같은 키의 시드 형식과 확장 형식은 서로 일치해야 하며, ML-DSA 키는 저장된 t0와 tr을 재현해야 합니다. SLH-DSA는 시드에서 PK.root를 다시 계산하며 그 비용은 키 생성 한 번 정도이므로, 이 가져오기에는 aVerify 매개변수가 있고 기본값은 True이며, 자체 애플리케이션이 생성한 키에는 False를 전달할 수 있습니다. |
| PEM 내보내기 & 가져오기 | sgcMLDSA_ExportPublicKeyPEM, ExportPrivateKeyPEM, ImportPublicKeyPEM, ImportPrivateKeyPEM, 그리고 sgcMLKEM_* 및 sgcSLHDSA_* 세트 | RFC 7468의 -----BEGIN ... -----END 래퍼이므로, 이 키들도 나머지 PKI와 같은 파일과 도구에 그대로 들어갑니다. |
| 개인 키 형식 | TsgcPQCPrivateKeyFormat | ML-DSA와 ML-KEM 개인 키에는 세 가지 형식이 있습니다. pqkfSeed는 시드만 기록하고(ML-DSA는 32바이트, ML-KEM은 64바이트 d||z 시드), pqkfExpanded는 확장된 키를 기록하며, pqkfBoth는 둘 다 담습니다. SLH-DSA의 개인 키 형식은 하나뿐입니다. |
| 시드를 함께 돌려주는 키 생성 | sgcMLDSA_GenerateKeyPairAndSeed, sgcMLKEM_GenerateKeyPairAndSeed | 키 쌍과 함께 시드를 돌려주므로, 생성 직후에 시드 형식의 PKCS#8 또는 PEM 파일을 바로 기록할 수 있습니다. |
| X-Wing 하이브리드 KEM | sgcXWing_GenerateKeyPair, sgcXWing_Encapsulate, sgcXWing_Decapsulate | draft-connolly-cfrg-xwing-kem-10: X25519와 ML-KEM-768을 하나의 KEM으로 묶었습니다. 공개 키 1216바이트, 개인 키 32바이트(시드), 암호문 1120바이트, 공유 비밀 32바이트입니다. |
| TLS 1.3 하이브리드 키 셰어 | sgcTLSHybrid_ClientKeyShare, sgcTLSHybrid_ServerKeyShare, sgcTLSHybrid_ClientSharedSecret, sgcTLSHybrid_GroupName, sgcTLSHybrid_Available | RFC 10024의 X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 그룹입니다(IANA 코드포인트 0x11EC, 0x11EB, 0x11ED). 이들은 독립적인 KEM이 아니라 TLS 키 셰어를 구성할 뿐입니다. |
| JSON 웹 토큰용 ML-DSA | JWTOptions.Algorithms.MLDSA.PrivateKey, PublicKey, Enabled, sgcMLDSA_ExportPublicJWK, sgcMLDSA_ExportPrivateJWK, sgcMLDSA_ImportJWK, sgcMLDSA_ImportJWKAsPEM | RFC 9964이며, sgcCrypto_* 유닛이 아니라 sgcHTTP_JWT_MLDSA에 있습니다. JWS 알고리즘은 ML-DSA-44, ML-DSA-65, ML-DSA-87(jwtMLDSA44, jwtMLDSA65, jwtMLDSA87)이고, 클라이언트는 PKCS#8 PEM을, 서버는 SubjectPublicKeyInfo PEM을 사용하며, AKP JSON 웹 키를 지원합니다. 이 경로 어디에도 OpenSSL은 없습니다. |
| 알려진 정답 검증 | NIST ACVP 벡터 | ML-KEM 키 생성, 캡슐화, 디캡슐화와 ML-DSA 및 SLH-DSA 키 생성, 서명 생성, 서명 검증은 sgcWebSockets QA 스위트에서 NIST ACVP 알려진 정답 벡터와 대조하여 검사됩니다. |
sgcCrypto는 ed25519187이나 SPECK를 제공한다고 주장하지 않습니다. ed25519187은 공개된 명세가 없으며, SPECK는 2018년 ISO 표준화에서 철회되었습니다. 둘 다 여기에는 구현되어 있지 않습니다.
sgcCrypto 기본 요소 위에 Object Pascal로 작성되어 같은 패키지로 함께 제공됩니다. sgcCrypto_*가 아니라 sgcSSL_NativeTLS* 유닛에 있으므로, 위에서 센 43개에는 포함되지 않습니다.
| 기능 | API | 비고 |
|---|---|---|
| 클라이언트에서 선택 | TLSOptions.IOHandler := iohNativeTLS | OpenSSL, SChannel, 플랫폼 TLS 백엔드를 프로세스 내부의 Pascal 엔진으로 대체합니다. 어떤 타깃에서도 배포할 것이 없습니다. |
| 서버에서 선택 | SSLOptions.IOHandler := iohNativeTLS | 기본 Indy 서버 엔진은 물론 IOCP와 EPOLL 엔진에서도 동작합니다. |
| 프로토콜 버전 | TLSOptions.Version | 허용되는 최저 버전입니다. tls1_2 또는 tlsUndefined는 TLS 1.3과 TLS 1.2를 모두 협상하고, tls1_3은 TLS 1.3만 허용하며, tls1_0이나 tls1_1은 구성 오류를 발생시킵니다. 서버에서는 SSLOptions.Version이 동일하게 동작합니다. TLS 1.2만 사용하려면 CipherSuites에 TLS 1.2 스위트만 나열하세요. |
| 키 교환 그룹 | TLSOptions.NativeTLS_Options.Groups | 콜론으로 구분하며 OpenSSL 방식입니다. 기본값은 X25519MLKEM768:X25519:secp256r1:secp384r1이며, 상대가 동의하면 핸드셰이크는 항상 포스트 퀀텀 하이브리드가 됩니다. SGC_CRYPTO_FIPS로 빌드하면 대신 SecP256r1MLKEM768:SecP384r1MLKEM1024:secp256r1:secp384r1이 기본값이 됩니다. 세 하이브리드 그룹은 TLS 1.3에만 있으므로, TLS 1.2 연결에서는 X25519, secp256r1 또는 secp384r1을 사용합니다. |
| 암호 스위트 | TLSOptions.NativeTLS_Options.CipherSuites | 콜론으로 구분하며 OpenSSL 방식입니다. 기본값은 TLS 1.3에서 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256이며, TLS 1.2에서는 ECDHE_ECDSA와 ECDHE_RSA를 AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305와 함께 추가로 제공합니다. ECDHE AES-CBC와 RSA 키 교환은 직접 지정했을 때만 사용되며, TLS 1.2 스위트는 모두 합쳐 20개입니다. SGC_CRYPTO_FIPS로 빌드하면 ChaCha20-Poly1305와 RSA 키 교환이 빠집니다. |
| 신뢰 루트 | TLSOptions.RootCertFile, TLSOptions.NativeTLS_Options.UseSystemRoots | 루트는 RootCertFile에서 가져옵니다. 운영 체제가 이미 신뢰하는 루트를 추가하려면 UseSystemRoots를 True로 설정하세요. Windows에서는 ROOT 저장소이고, 그 밖의 모든 플랫폼에서는 표준 위치들 중 처음 발견되는 CA 번들 파일입니다. macOS나 iOS 키체인, Android 저장소는 읽지 않습니다. 기본값은 꺼짐이며, 그래서 RootCertFile이 계속 원본이 됩니다. SSLOptions의 같은 속성은 서버가 검증하는 클라이언트 인증서에 적용됩니다. |
| 체인 구성 | 상대가 보내는 인증서 체인 | 체인에서 리프부터 신뢰 루트까지의 경로를 검색하므로, 추가 인증서와 임의의 순서도 RFC 8446 4.4.2절이 요구하는 대로 허용됩니다. 검색은 백트래킹을 하므로, 올바른 발급자를 지목하지만 어디에도 이르지 못하는 인증서가 그 뒤의 유효한 경로를 더 이상 가리지 않습니다. 해지 확인과 인증서 정책은 검사하지 않습니다. |
| 프로토콜 범위 | RFC 8446, RFC 5246 | TLS 1.3과 TLS 1.2를 지원합니다. TLS 1.1, TLS 1.0, SSL은 지원하지 않습니다. TLS 1.2는 RFC 7627의 확장 마스터 시크릿과 양쪽 모두에 적용되는 RFC 8446의 다운그레이드 방지를 사용하며, 재협상과 SHA-1 서명(RFC 9155)을 거부하고, CBC 레코드를 상수 시간으로 검사합니다. |
| 구현되지 않은 항목 | n/a | 세션 재개와 PSK가 없고, 0-RTT도 QUIC도 없습니다. |
| 피어 검증 이벤트 | OnSSLVerifyPeer | 이 엔진에서는 사용할 수 없으며, 엔진이 자체 검증 훅을 가지고 있습니다. 코드가 이 이벤트에 의존한다면 OpenSSL이나 플랫폼 백엔드를 계속 사용하세요. |
유틸리티 계층입니다. 일회용 코드, 다른 모든 패밀리가 의지하는 인코딩, 그리고 WinZip AES 암호화입니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| HOTP | sgcHOTP | RFC 4226, 카운터 기반 일회용 비밀번호입니다. |
| TOTP | sgcTOTP, sgcTOTP_FromBase32 | RFC 6238, 시간 기반 일회용 비밀번호입니다. Base32 변형은 인증 앱이 표시하는 그대로의 비밀 값을 받아들입니다. |
| TOTP 검증 | sgcTOTP_Verify | 제출된 코드를 여러 스텝의 윈도우에 걸쳐 상수 시간으로 확인하므로, 결과도 그 위치도 타이밍을 통해 드러나지 않습니다. 재전송 자체를 막지는 않으므로, 사용된 코드 추적은 호출자가 담당합니다. |
| 상수 시간 비교 | sgcConstantTimeEquals | 라이브러리 전반에서 태그와 MAC 비교에 사용됩니다. |
| 안전한 초기화 | sgcSecureZero | 키 자료가 메모리에 남지 않도록 바이트 버퍼를 덮어씁니다. |
| Hex | sgcHexEncode / sgcHexDecode | 소문자 hex, 대소문자 구분 없는 디코딩입니다. |
| Base64url | sgcBase64UrlEncode / sgcBase64UrlDecode | RFC 4648 5절, 패딩 없음. JWT와 JOSE가 사용하는 인코딩입니다. |
| Base32 | sgcBase32Encode / sgcBase32Decode | RFC 4648 6절. TOTP 비밀 값과 인증 앱이 사용하는 인코딩입니다. |
| WinZip AES 키 유도 | sgcZipAE2_DeriveKeys | 비밀번호와 솔트로부터 PBKDF2 기반의 키, 인증 키, 비밀번호 검증기를 생성합니다. |
| WinZip AES 암호화 / 복호화 | sgcZipAE2_Encrypt / sgcZipAE2_Decrypt | AE-1과 AE-2, AES-128/192/256, TsgcZipAESStrength를 통한 항목별 솔트 크기 지정. |
| WinZip 항목 패킹 | sgcZipAE2_PackEntry / sgcZipAE2_UnpackEntry | 솔트, 검증기, 암호문, 인증 코드를 디스크 레이아웃으로 결합합니다. |
| WinZip 추가 필드 | sgcZipAE2_BuildExtraField / sgcZipAE2_ParseExtraField | ZIP 항목을 AES 암호화로 표시하는 0x9901 추가 필드입니다. |
| 레거시 해시(상호운용 전용) | sgcMD4, sgcMD5, sgcHMAC_MD5 | 이전 형식과 프로토콜을 읽기 위해 유지됩니다. 새로운 설계에는 사용하지 마세요. |
| 레거시 암호(상호운용 전용) | sgcDES_EncryptECB / sgcDES_DecryptECB, sgcDES_NTLM7to8 | DES-ECB와 DES 기반 NTLM 키 확장 단계입니다. 둘 다 철회되었지만(FIPS 46-3), 레거시 상호운용을 위해 유지됩니다. |
| 안전한 난수 바이트 | sgcRandomBytes / sgcRandomFill | MSWINDOWS에서는 BCryptGenRandom (Windows CNG), 그 외에는 /dev/urandom이며, 어느 쪽이든 호출은 하나입니다. |
지원 범위를 정확하게 밝힙니다.
| 영역 | 세부 사항 |
|---|---|
| 운영체제 | sgcVer.inc에서 SGC_CRYPTO를 감싸는 MSWINDOWS 가드나 다른 어떤 플랫폼 가드도 없습니다. 43개 유닛 모두 Win32, Win64, Linux64, macOS, iOS, Android용으로 컴파일됩니다. |
| 난수 소스 | 플랫폼을 인식하는 유일한 유닛인 sgcCrypto_Random은 동일한 sgcRandomBytes 호출 뒤에서 대상별로 CSPRNG를 선택합니다: MSWINDOWS에서는 BCryptGenRandom (Windows CNG), POSIX 대상에서는 /dev/urandom입니다. 바이트는 운영 체제의 난수 생성기에서 직접 가져오며, 그 위에 자체 생성기를 두지 않습니다. Windows에서는 BCryptGenRandom을 사용할 수 없을 때만 RtlGenRandom, 그다음 CryptGenRandom을 사용하며, 어떤 소스도 읽을 수 없으면 약한 바이트를 반환하는 대신 예외를 발생시킵니다. |
| FIPS 모드 | 기본적으로 꺼져 있는 선택적 조건부 정의 SGC_CRYPTO_FIPS로, 컴파일 시점에 43개 유닛에서 승인되지 않은 알고리즘을 모두 제거하고 런타임에 몇 가지 매개변수 규칙을 검사합니다. 라이브러리를 FIPS 승인 알고리즘 범위 안에 유지하지만, sgcCrypto는 FIPS 140-3 검증을 받은 모듈이 아니며 이 정의가 검증을 주장하는 것도 아닙니다. FIPS 모드 |
| Delphi | Delphi 7부터 RAD Studio 13 Florence까지입니다. 어디에서도 네이티브 64비트 정수 타입이 있다고 가정하지 않습니다. sgcCrypto_Int64와 sgcCrypto_BigInteger 안의 TsgcBigInt 타입이 해시, 곡선, 포스트 퀀텀 유닛에 필요한 연산을 에뮬레이션합니다. |
| C++ Builder | 생성된 헤더를 통해 C++ Builder에서도 동일한 소스 트리를 사용합니다. |
| 디자인 타임 흔적 | 없습니다. sgcCrypto_Reg.pas도 없고, RegisterComponents로 등록되는 것도 없으며, 컴포넌트 팔레트 페이지에 나타나는 유닛도 없습니다. |
| 의존성 | OpenSSL 바인딩도, 외부 DLL도 없습니다. 모든 기본 요소는 참조하는 유닛 안에서 직접 Object Pascal로 구현되어 있습니다. |
| 소스 코드 | 모든 유료 등급, 그리고 sgcCrypto가 이미 포함된 에디션 패키지에 전체 Object Pascal 소스가 포함됩니다. |
| 재배포 | 직접 빌드한 바이너리는 좌석당 또는 서버당 런타임 비용 없이 로열티 없이 재배포할 수 있습니다. |