sgcCrypto 機能マトリックス
sgcCrypto ができることすべてを、ディスク上の 43 ユニットにマッピングしています。ここにはコンポーネントも設計時プロパティもありません。以下の各行は、直接呼び出す関数またはプロシージャです。完全なソースコードはすべてのライセンスに付属します。下のアンカーから、ユニットが属する 6 つの機能ファミリーへ移動できます。
sgcCrypto ができることすべてを、ディスク上の 43 ユニットにマッピングしています。ここにはコンポーネントも設計時プロパティもありません。以下の各行は、直接呼び出す関数またはプロシージャです。完全なソースコードはすべてのライセンスに付属します。下のアンカーから、ユニットが属する 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、CCM(AEAD)、Key Wrap / Padding 付き 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 | 署名 & 鍵交換 | PEM または raw から、RSA PKCS#1 v1.5 署名、PKCS#1 v1.5 / PSS 検証。 |
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 の解析、検証、チェーン、CRL、失効確認。 |
sgcCrypto_X509_Gen | PKI | 自己署名証明書と PKCS#10 CSR の生成。RSA または EC で署名でき、URI サブジェクト代替名にも対応。 |
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)、6 種類の SHAKE パラメータセット。 |
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-CCM(AEAD) | sgcAES_CCM_Encrypt / sgcAES_CCM_Decrypt | 制約のある環境や IoT スタックが指定する AEAD で、Zigbee、802.15.4、Bluetooth、そして TLS の CCM スイートが該当します。ブロック暗号だけで済み、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 の 2 番目の暗号スイートと SSH の裏にある AEAD 暗号です。 |
| XChaCha20-Poly1305 AEAD | sgcXChaCha20Poly1305_Encrypt / _Decrypt | 同じ AEAD で 192 ビットナンス。libsodium が crypto_aead_xchacha20poly1305_ietf と呼ぶ構成です。 |
主要なハッシュファミリーすべてに加え、PBKDF2、HKDF、scrypt、Argon2 の 3 種類すべてに対応します。
| 機能 | 関数 | 備考 |
|---|---|---|
| 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 で、ハッシュフラッディング DoS に耐性があります。 |
| TLSH ファジーハッシュ | sgcTLSH、sgcTLSH_Init/_Update/_Final | ほぼ重複するデータの検出向けの局所性鋭敏型ハッシュで、暗号学的ダイジェストではありません。 |
| TLSH 類似度スコア | sgcTLSH_Diff | 2 つの TLSH ダイジェスト間の距離。値が小さいほど類似しています。 |
5 種類の異なる曲線ファミリーと RSA にまたがって、署名、検証、共有秘密の導出を行います。
| 機能 | 関数 | 備考 |
|---|---|---|
| Ed25519 署名 / 検証 | sgcEd25519_Sign / sgcEd25519_Verify | RFC 8032。32 バイトの公開鍵、64 バイトの署名。検証は非正規の点と section 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 にある、SEC 2 の Bitcoin/Ethereum 曲線です。 |
| Brainpool P256r1 / P384r1 / P512r1 | eccBrainpoolP256r1 / P384r1 / P512r1 を指定した同じ関数群 | RFC 5639。EU の eIDAS や政府プロファイルで一般的です。 |
| NIST P-256 / P-384 / P-521 | eccP256 / eccP384 / eccP521 を指定した同じ関数群 | TsgcECCurve は現在7種類の曲線を持つため、鍵生成、署名、検証、ECDH、点圧縮のすべてが、PEM ファイルからだけでなく生の鍵バイト列からも NIST 素数曲線に到達できます。 |
| 決定論的 ECDSA ナンス | sgcECDSA_SignHash に組み込み | RFC 6979。ナンスは秘密鍵とメッセージから導出され、乱数生成器の失敗モードがありません。 |
| ECDH(secp256k1 / Brainpool) | sgcECDH_SharedSecret | 同じ 4 種類の曲線上での共有秘密。 |
| ポイント圧縮 | sgcEC_Compress / sgcEC_Decompress | より短い圧縮形式の公開鍵を保存または送信します。 |
| JWS としての EC(ES256/384/512) | sgcECDSA_SignJWS / sgcECDSA_VerifyJWS | 要求されたビット長から曲線を自動選択し、PEM 鍵から直接署名/検証する、ECCurves の JOSE 向け姉妹ユニットです。 |
| 汎用 ECDH | sgcECDH | raw の秘密鍵と相手の公開点から共有秘密を導出します。 |
| raw / DER の ECDSA 検証 | sgcECDSA_VerifyRaw / sgcECDSA_VerifyDER | raw の (Qx, Qy, r, s) タプル、または DER エンコードされた署名を検証します。 |
| DER ECDSA 署名と変換 | sgcECDSA_SignDER / sgcECDSA_VerifyDER、sgcECDSA_RawToDER / sgcECDSA_DERToRaw | X.509、CMS、TLS は、INTEGER r の後に INTEGER s が続く SEQUENCE である DER の ECDSA-Sig-Value を使用します。JOSE と WebAuthn は代わりに生の R || S ペアを使用します。どちらの形式にも直接署名でき、既存の署名を両者の間で変換することもできます。 |
| Schnorr 署名(BIP-340) | sgcSchnorr_PublicKey、sgcSchnorr_Sign、sgcSchnorr_Verify | secp256k1 専用で、x 座標のみの 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 検証(PKCS#1 v1.5 / PSS) | sgcRSA_VerifyPKCS1、sgcRSA_VerifyPSS、モジュラス/指数に対する _Raw バリアント | RFC 8017。PEM 鍵、または raw のモジュラスと指数のどちらからでも検証でき、鍵オブジェクトの構築は不要です。 |
| RSA 鍵生成 | sgcRSA_GenerateKey | 任意のビット長、Miller-Rabin 素数判定。 |
| RSA-OAEP 暗号化 | sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | RFC 8017 の Optimal Asymmetric Encryption Padding。 |
| 独立した MGF1 ハッシュを持つ RSA-OAEP | 5 パラメータの 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 section 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 を組み合わせ、往復とも 1 回の呼び出しです。 |
他者が発行した証明書を読み取るか、自分で生成するか。どちらの裏にも 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 が使う 3 種類の文字列型、そして UTCTime/GeneralizedTime です。 |
| 証明書解析 | sgcX509_Parse | subject、issuer、有効期間、公開鍵、拡張を含む完全な証明書構造です。 |
| 署名 / チェーン検証 | sgcX509_VerifySignedBy、sgcX509_VerifyChain | 1 つの証明書を発行者に対して検証するか、DER 証明書の配列をたどって検証します。 |
| CRL 解析 & 失効確認 | sgcX509_CRL_Parse、sgcX509_IsRevoked、sgcX509_CRL_VerifySignedBy | 証明書失効リストを解析し、シリアル番号を照合します。 |
| 名前のフォーマット | sgcX509_SubjectRFC2253、sgcX509_IssuerRFC2253、sgcX509_SubjectOneLine | ロギングや表示向けの RFC 2253 識別名文字列です。 |
| 拡張 & SAN | sgcX509_GetExtension、sgcX509_GetCRLDistributionURIs | 任意の拡張 OID と CRL 配布ポイント URI を読み取ります。 |
| 自己署名証明書の生成 | sgcX509_CreateSelfSigned | 完全な TsgcX509Options: subject DN、有効期間、シリアル番号、パス長制約付き CA フラグ、鍵用途、拡張鍵用途、サブジェクト代替名(IPv4 SAN を含む)。 |
| URI サブジェクト代替名 | TsgcX509Options.URIs | ホスト名ではなく SPIFFE 形式のサービス ID 向けの uniformResourceIdentifier SAN です。値は 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を意味します。 |
| PEM 出力 | sgcX509_ToPEM | 生成した DER を、すぐに保存できる PEM ファイルとしてラップします。 |
NIST が 2024 年 8 月に FIPS 203、204、205 として確定した 3 つのアルゴリズムに加え、移行期間向けのハイブリッドコンバイナーです。
| 機能 | 関数 | 備考 |
|---|---|---|
| ML-KEM 鍵生成 | sgcMLKEM_GenerateKeyPair、sgcMLKEM_GenerateKeyPairFromSeed | FIPS 203、旧称 Kyber。3 種類のパラメータセット: mlkem512、mlkem768、mlkem1024。 |
| ML-KEM カプセル化 | sgcMLKEM_Encapsulate、sgcMLKEM_EncapsulateWithSeed | 新しい 32 バイトの共有秘密と、それを運ぶ暗号文を生成します。 |
| ML-KEM デカプセル化 | sgcMLKEM_Decapsulate | 失敗しません。不正な形式の暗号文はエラーではなく擬似乱数の秘密(implicit rejection)を生成するため、タイミングやエラーの挙動から何も漏れません。 |
| 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。3 種類のパラメータセット: 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 | 6 種類の SHAKE パラメータセット: slhShake128s、slhShake128f、slhShake192s、slhShake192f、slhShake256s、slhShake256f。s 系は署名の小ささ、f 系は署名の速さを優先します。 |
| SLH-DSA のサイズ & 命名 | sgcSLHDSA_PublicKeySize、PrivateKeySize、SignatureSize、sgcSLHDSA_ParamsName | SLH-DSA の署名は大きく(セットにより 7.8 KB から 49 KB)、署名前にバッファサイズを決めてください。 |
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 section 5、パディングなし。JWT と JOSE が使うエンコーディングです。 |
| Base32 | sgcBase32Encode / sgcBase32Decode | RFC 4648 section 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 は、対象ごとに CSPRNG を選択します。MSWINDOWS では Windows CryptoAPI、POSIX 系のターゲットでは /dev/urandom を、同じ sgcRandomBytes 呼び出しの裏側で行います。 |
| 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 のソースコードが提供されます。 |
| 再配布 | ビルドしたバイナリはロイヤリティフリーで、シート単位やサーバー単位のランタイム費用もありません。 |