sgcCrypto 기능 매트릭스
디스크에 있는 43개 유닛 전체에 걸쳐 sgcCrypto가 하는 모든 일을 정리했습니다. 여기에는 컴포넌트도 디자인 타임 속성도 없습니다. 아래의 모든 행은 직접 호출하는 함수 또는 프로시저입니다. 전체 소스 코드는 모든 라이선스에 포함됩니다. 아래 앵커를 클릭하면 유닛들이 속한 6개의 기능 패밀리로 이동합니다.
디스크에 있는 43개 유닛 전체에 걸쳐 sgcCrypto가 하는 모든 일을 정리했습니다. 여기에는 컴포넌트도 디자인 타임 속성도 없습니다. 아래의 모든 행은 직접 호출하는 함수 또는 프로시저입니다. 전체 소스 코드는 모든 라이선스에 포함됩니다. 아래 앵커를 클릭하면 유닛들이 속한 6개의 기능 패밀리로 이동합니다.
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, 그리고 Key Wrap / 패딩 포함 Key Wrap. |
sgcCrypto_CMAC | 대칭 | AES-CMAC 메시지 인증. |
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, 해시 선택 가능. |
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 위의 ECDSA / ECDH. |
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, PSS, PKCS#1 서명/검증, 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 파싱, 검증, 체인, CRL, 폐기 확인. |
sgcCrypto_X509_Gen | PKI | 자체 서명 인증서 및 PKCS#10 CSR 생성. |
sgcCrypto_MLKEM | 포스트 퀀텀 | ML-KEM 키 캡슐화(FIPS 203), 매개변수 집합 3종. |
sgcCrypto_MLKEM_Poly | 포스트 퀀텀 | ML-KEM 뒤에 있는 내부 다항식 환 연산. |
sgcCrypto_MLKEM_Hybrid | 포스트 퀀텀 | 하이브리드 X25519 + ML-KEM 키 캡슐화. |
sgcCrypto_MLDSA | 포스트 퀀텀 | ML-DSA 전자 서명(FIPS 204), 매개변수 집합 3종. |
sgcCrypto_MLDSA_Poly | 포스트 퀀텀 | ML-DSA 뒤에 있는 내부 다항식 환 연산. |
sgcCrypto_SLHDSA | 포스트 퀀텀 | SLH-DSA 서명(FIPS 205), SHAKE 매개변수 집합 6종. |
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, 상호운용 전용. |
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-GCM(AEAD) | sgcAES_GCM_Encrypt / sgcAES_GCM_Decrypt | 12바이트 IV를 권장합니다. 16바이트 태그를 상수 시간으로 비교하며, 태그 검증에 실패하면 복호화는 False와 빈 평문을 반환합니다. |
| AES-CTR | sgcAES_CTR | SRTP 방식의 AES-CM(RFC 3711). 대칭 호출, 패딩 없음, 128비트 빅 엔디언 카운터. |
| AES-ECB | sgcAES_ECB_Encrypt / sgcAES_ECB_Decrypt | IV도 체이닝도 없습니다. 이를 지정하는 형식과의 상호운용을 위해 포함되어 있습니다. |
| 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 메시지 인증 코드입니다. |
| 저수준 블록 기본 요소 | 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 계열 위의 키 기반 해싱입니다. |
| 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 키 유도이며, 공유 비밀을 여러 키로 바꾸는 표준적인 방법입니다. |
| 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 | RFC 8032. 32바이트 공개 키, 64바이트 서명. 검증은 5.1.7절에 따라 비정규 점과 S >= L을 거부합니다. |
| 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 및 정부 프로필에서 흔히 사용됩니다. |
| 결정적 ECDSA 논스 | sgcECDSA_SignHash에 내장 | RFC 6979: 논스가 개인 키와 메시지로부터 유도되므로 RNG 실패 상황이 없습니다. |
| 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 인코딩된 서명에 대해 검증합니다. |
| RSA 서명(PKCS#1 v1.5) | sgcRSA_SignPKCS1 | PEM 개인 키로부터, SHA-1/256/384/512 다이제스트. |
| 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의 최적 비대칭 암호화 패딩입니다. |
| RSA-PSS / PKCS#1 서명 | sgcRSA_PSS_Sign / Verify, sgcRSA_PKCS1_Sign / Verify | 생성된 TsgcRSAPrivateKey로부터 직접 서명합니다. |
| RSA 키 내보내기 | sgcRSA_ExportPrivateKeyPEM, sgcRSA_ExportPublicKeyPEM, 그리고 대응하는 DER 호출 | PKCS#1 및 SubjectPublicKeyInfo 인코딩입니다. |
| ECIES seal / open | sgcECIES_GenerateKeyPair, sgcECIES_Seal, sgcECIES_Open | X25519 공개 키에 대한 하이브리드 암호화입니다. 임시 ECDH와 AEAD를 결합해 각 방향마다 한 번의 호출로 처리합니다. |
다른 사람이 발급한 인증서를 읽거나, 직접 생성할 수 있으며, 두 경우 모두 아래에 DER 인코더와 디코더가 있습니다.
| 기능 | 함수 | 비고 |
|---|---|---|
| DER 리더 | sgcASN1_Read, sgcASN1_Next, sgcASN1_Content | DER 구조를 노드 단위로 순회합니다. |
| 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 포함). |
| PKCS#10 CSR 생성 | sgcX509_CreateCSR | 동일한 옵션 레코드로부터 만드는 RFC 2986 인증서 서명 요청입니다. |
| 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바이트 공유 비밀과 이를 담는 암호문을 생성합니다. |
| ML-KEM 디캡슐화 | sgcMLKEM_Decapsulate | 절대 실패하지 않습니다: 손상된 암호문은 오류 대신 의사난수 비밀(암묵적 거부)을 만들어내므로, 타이밍과 오류 동작 어느 쪽으로도 정보가 드러나지 않습니다. |
| 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까지 큽니다. 서명 전에 버퍼 크기를 맞추세요. |
sgcCrypto는 ed25519187이나 SPECK를 제공한다고 주장하지 않습니다. ed25519187은 공개된 명세가 없으며, SPECK는 2018년 ISO 표준화에서 철회되었습니다. 둘 다 여기에는 구현되어 있지 않습니다.
유틸리티 계층입니다. 일회용 코드, 다른 모든 패밀리가 의지하는 인코딩, 그리고 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에서는 Windows CryptoAPI, 그 외에는 /dev/urandom이며, 어느 쪽이든 호출은 하나입니다. |
지원 범위를 정확하게 밝힙니다.
| 영역 | 세부 사항 |
|---|---|
| 운영체제 | sgcVer.inc에서 SGC_CRYPTO를 감싸는 MSWINDOWS 가드나 다른 어떤 플랫폼 가드도 없습니다. 43개 유닛 모두 Win32, Win64, Linux64, macOS, iOS, Android용으로 컴파일됩니다. |
| 난수 소스 | 플랫폼을 인식하는 유일한 유닛인 sgcCrypto_Random은 동일한 sgcRandomBytes 호출 뒤에서 대상별로 CSPRNG를 선택합니다: MSWINDOWS에서는 Windows CryptoAPI, POSIX 대상에서는 /dev/urandom입니다. |
| 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 소스가 포함됩니다. |
| 재배포 | 직접 빌드한 바이너리는 좌석당 또는 서버당 런타임 비용 없이 로열티 없이 재배포할 수 있습니다. |