sgcCrypto 機能マトリックス

sgcCrypto ができることすべてを、ディスク上の 43 ユニットにマッピングしています。ここにはコンポーネントも設計時プロパティもありません。以下の各行は、直接呼び出す関数またはプロシージャです。完全なソースコードはすべてのライセンスに付属します。下のアンカーから、ユニットが属する 6 つの機能ファミリーと、同じパックがその上に構築する TLS 1.3 および TLS 1.2 エンジンへ移動できます。

sgcCrypto にコンポーネントはありません。 以下の 43 ユニットは単なる関数をエクスポートします。Tsgc* クラスも sgcCrypto_Reg.pas もありません。ユニットを uses 句に追加し、関数を呼び出すだけです。

すでに同梱されています。 sgcCrypto は sgcWebSockets Standard、Professional、Enterprise、そして All-Access に無料で同梱されています。Core のみをお持ちのお客様向けに単体でも販売されています(sgcWebSockets Core ランタイムを同梱)。詳しくは価格ページをご覧ください。

対称暗号

AES、CCM、ChaCha20、Poly1305、5 ユニット

ハッシュ & KDF

SHA-2/3、BLAKE2、Argon2、11 ユニット

署名 & 鍵交換

Ed25519、X25519、Schnorr、RSA、10 ユニット

PKI

X.509、ASN.1、RSA & EC CSR、5 ユニット

耐量子

ML-KEM、ML-DSA、SLH-DSA、6 ユニット

OTP & その他

HOTP/TOTP、エンコーディング、ZIP AES、6 ユニット

TLS 1.3 および TLS 1.2 エンジン

iohNativeTLS、X25519MLKEM768、純粋な Pascal

43 のソースユニット

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ハッシュ & KDFSHA-1、SHA-224、SHA-256、SHA-384、SHA-512。
sgcCrypto_Keccakハッシュ & KDFSHA-3、SHAKE128/256、cSHAKE、KMAC。
sgcCrypto_Blake2bハッシュ & KDFBLAKE2b、鍵付き/鍵なし。
sgcCrypto_Blake2sハッシュ & KDFBLAKE2s、鍵付き/鍵なし。
sgcCrypto_HMACハッシュ & KDFHMAC-SHA1/256/384/512。
sgcCrypto_KDFハッシュ & KDFPBKDF2、KDF1、KDF2、X9.63、ハッシュ関数を選択可能。
sgcCrypto_HKDFハッシュ & KDFHKDF の extract-and-expand。
sgcCrypto_Scryptハッシュ & KDFscrypt メモリハード KDF。
sgcCrypto_Argon2ハッシュ & KDFArgon2d、Argon2i、Argon2id。
sgcCrypto_SipHashハッシュ & KDFSipHash-2-4 鍵付きハッシュ。
sgcCrypto_TLSHハッシュ & KDFTLSH ファジーハッシュと類似度診断。
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_ASN1PKIDER リーダー、PEM コーデック、PKCS#1/SEC 1 鍵解析。
sgcCrypto_DERPKIDER ライタープリミティブ。
sgcCrypto_BigIntegerPKI内部の任意精度整数演算。
sgcCrypto_X509PKIX.509 の解析、検証、pathLenConstraint と nameConstraints を伴うチェーン、CSR の検証、CRL、失効確認。RSA、EC、Ed25519、ML-DSA、SLH-DSA、ML-KEM の公開鍵を読み取ります。
sgcCrypto_X509_GenPKI自己署名証明書、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)、6 種類の SHAKE パラメータセット。SubjectPublicKeyInfo、PKCS#8、PEM での鍵のインポートとエクスポートに対応。
sgcCrypto_OTPOTP & その他HOTP、TOTP、定数時間の検証ウィンドウ。
sgcCrypto_EncodingOTP & その他定数時間比較、セキュアゼロ化、hex/Base64url/Base32。
sgcCrypto_Zip_AE2OTP & その他ZIP エントリ向けの WinZip AES 暗号化、AE-1 / AE-2。
sgcCrypto_LegacyOTP & その他MD4、MD5、HMAC-MD5、DES-ECB、RIPEMD-160、HMAC-RIPEMD160。相互運用のみが目的です。
sgcCrypto_RandomOTP & その他クロスプラットフォームな CSPRNG。
sgcCrypto_Int64OTP & その他Delphi 7 向けの内部 64 ビット整数エミュレーション。

暗号化 & MAC

実運用のコードが実際に使うモードでの AES、そして ChaCha20/Poly1305 の AEAD ファミリーです。

機能関数備考
AES-CBCsgcAES_CBC_Encrypt / sgcAES_CBC_DecryptPKCS#7 パディング、16 バイト IV。鍵長が暗号を決定します。16/24/32 バイト = AES-128/192/256。
AES-CBC、パディングなしsgcAES_CBC_Encrypt_NoPad / sgcAES_CBC_Decrypt_NoPadJava が AES/CBC/NoPadding と表記するモードです。入力は既に 16 バイトの倍数でなければならず、揃っていない入力は、黙ってパディングされて相手が読めないものになるのではなく、例外を発生させます。
AES-GCM(AEAD)sgcAES_GCM_Encrypt / sgcAES_GCM_Decrypt12 バイト IV を推奨。16 バイトタグは定数時間で比較され、検証失敗時は復号は False と空の平文を返します。
AES コアsgcAES_GetCore / sgcAES_SetCoreaescConstantTime が既定で、秘密のバイトでメモリを参照したり分岐したりしないビットスライス方式のコアです。これにより、鍵と平文に対するキャッシュタイミングのチャネルが塞がれます。aescTable は従来のテーブル方式のコアで、データキャッシュ経由で情報が漏れ、あらゆる測定で低速だったため、フォールバックとしてのみ残されています。GCM を認証する GHASH は、鍵で分岐する代わりにマスクの下で乗算します。コアは起動時に一度だけ、ワーカースレッドが動作する前に設定してください。
AES-CCM(AEAD)sgcAES_CCM_Encrypt / sgcAES_CCM_Decrypt制約のある環境や IoT スタックが指定する AEAD で、Zigbee、802.15.4、Bluetooth、そして TLS の CCM スイートが該当します。ブロック暗号だけで済み、GHASH テーブルを必要としないためです。ノンスは 7 から 13 バイト、タグは 4 から 16 バイトで、定数時間で検証されます。
AES-CTRsgcAES_CTRSRTP スタイルの AES-CM(RFC 3711)。対称的な呼び出しで、パディングなし、128 ビットのビッグエンディアンカウンター。
AES-ECBsgcAES_ECB_Encrypt / sgcAES_ECB_DecryptIV なし、チェイニングなし。それを指定するフォーマットとの相互運用のために用意しています。
パディング方式sgcPad_Add / sgcPad_Remove、sgcAES_CBC_EncryptPad / DecryptPad、sgcAES_ECB_EncryptPad / DecryptPadTsgcPadding は None、PKCS#7、Zero、ANSI X9.23、ISO 7816-4、ISO 10126-2、TBC をカバーしており、CBC と ECB は PKCS#7 を選ばなかったシステムとの間でもデータを読み書きできます。sgcPad_Remove は、あらゆる種類の不正なパディングに対して同じ経路で False を返します。
AES-OFB / AES-CFBsgcAES_OFB、sgcAES_CFB_Encrypt / sgcAES_CFB_Decryptストリーム暗号スタイルのフィードバックモード。
AES-CTSsgcAES_CTS_Encrypt / sgcAES_CTS_Decrypt暗号文盗用。ブロックサイズの倍数でないデータを、パディングのオーバーヘッドなしで暗号化します。
AES Key WrapsgcAES_KeyWrap / sgcAES_KeyUnwrapRFC 3394。ある鍵を別の鍵でラップします。
AES Key Wrap with PaddingsgcAES_KeyWrapPad / sgcAES_KeyUnwrapPadRFC 5649。8 バイトの倍数でない鍵材料向け。
AES-CMACsgcAES_CMAC / sgcAES_CMAC_VerifyRFC 4493 のメッセージ認証コード。
AES-GMACsgcAES_GMAC / sgcAES_GMAC_VerifyGCM の認証専用モードです。メッセージ全体が追加データとして渡され、何も暗号化されません。IV は同じ鍵の下で決して繰り返してはならず、16 バイトのタグは定数時間で比較されます。
低レベルブロックプリミティブsgcAES_ExpandKey、sgcAES_EncryptBlock、sgcAES_DecryptBlock上記のモードと MAC ユニットのために公開されています。まだ用意されていないモードを構築する場合にのみ直接呼び出してください。
ChaCha20sgcChaCha20RFC 8439、96 ビットナンス、32 ビットカウンター。
XChaCha20sgcXChaCha20192 ビットの拡張ナンス。大規模にランダムなナンスを生成しても安全です。
Salsa20 / XSalsa20sgcSalsa20 / sgcXSalsa20先代のストリーム暗号ファミリーで、両方のナンスサイズに対応します。
サブ鍵導出sgcHChaCha20 / sgcHSalsa20X 系バリアントが、最初の 16 バイトのナンスからサブ鍵を導出する際に内部で使う関数です。
Poly1305 MACsgcPoly1305 / sgcPoly1305_VerifyRFC 8439 の一回限りの認証子です。Poly1305 の鍵を再利用しないでください。
ChaCha20-Poly1305 AEADsgcChaCha20Poly1305_Encrypt / _DecryptTLS 1.3 の 2 番目の暗号スイートと SSH の裏にある AEAD 暗号です。
XChaCha20-Poly1305 AEADsgcXChaCha20Poly1305_Encrypt / _Decrypt同じ AEAD で 192 ビットナンス。libsodium が crypto_aead_xchacha20poly1305_ietf と呼ぶ構成です。

ダイジェスト、MAC & パスワードハッシュ

主要なハッシュファミリーすべてに加え、PBKDF2、HKDF、scrypt、Argon2 の 3 種類すべてに対応します。

機能関数備考
SHA-1 / SHA-2sgcSHA1、sgcSHA224、sgcSHA256、sgcSHA384、sgcSHA512FIPS 180-4。SHA-1 は相互運用のために残していますが、新規の署名には推奨しません。
SHA-3sgcSHA3_224 / _256 / _384 / _512FIPS 202、Keccak スポンジ構造で、SHA-2 とは構造的に独立しています。
SHAKE128 / SHAKE256sgcSHAKE128 / sgcSHAKE256拡張可能出力関数。任意のダイジェスト長を要求できます。
cSHAKE128 / cSHAKE256sgcCSHAKE128 / sgcCSHAKE256ドメイン分離された SHAKE、NIST SP 800-185、KMAC の基盤です。
KMAC128 / KMAC256sgcKMAC128 / sgcKMAC256可変長出力に対応した Keccak ベースの MAC。
BLAKE2bsgcBlake2b / sgcBlake2b_KeyedRFC 7693。最大 64 バイトのダイジェスト、組み込みの鍵指定(別途 HMAC 不要)。
BLAKE2ssgcBlake2s / sgcBlake2s_KeyedRFC 7693。最大 32 バイトのダイジェスト、32 ビットプラットフォーム向けに調整済み。
ストリーミングダイジェストsgcBlake2b_Init/_Update/_Final、Keccak/Blake2s の対応する呼び出し一度にメモリへ収まらない大きなデータをハッシュする場合に。
HMACsgcHMAC_SHA1 / _SHA256 / _SHA384 / _SHA512RFC 2104、SHA-1/2 ファミリーによる鍵付きハッシュ。
RIPEMD-160 / HMAC-RIPEMD160sgcRIPEMD160、sgcHMAC_RIPEMD160ISO/IEC 10118-3 と RFC 2286。Bitcoin アドレスが SHA-256 の上に重ねる 160 ビットダイジェストであり、OpenPGP が名指しするものでもあります。
PBKDF2sgcPBKDF2、sgcPBKDF2_SHA1 / _SHA256 / _SHA512RFC 8018。メモリハード性は控えめです。選べるなら Argon2id か scrypt を優先してください。
HKDFsgcHKDF_Extract_SHA256 / _SHA384、sgcHKDF_Expand_SHA256 / _SHA384、sgcHKDF_SHA256 / _SHA384RFC 5869、extract-then-expand 方式の鍵導出。共有秘密を複数の鍵に変換する標準的な方法です。
KDF1 / KDF2 / X9.63sgcKDF1、sgcKDF2、sgcKDF_X963ISO 18033-2、IEEE 1363a、ANSI X9.63 が定めるカウンターモードの導出方式で、RSA-KEM や ECIES が名指しするものです。KDF1 はカウンターを 0 から、KDF2 は 1 から数え始めるという違いがあり、これは実際に相互運用性のバグを引き起こしてきたため、仕様がどちらを意味しているかを確認してください。
scryptsgcScryptRFC 7914、メモリハードで、PBKDF2 よりも GPU/ASIC 攻撃への耐性が高くなっています。
Argon2sgcArgon2(d / i / id)、便利ラッパーの sgcArgon2idRFC 9106、Password Hashing Competition の優勝方式。オプションの秘密(ペッパー)と関連データを含む完全なインターフェースです。
SipHash-2-4sgcSipHash24 / sgcSipHash24_Valueハッシュテーブルのキー向けの高速な鍵付き PRF で、ハッシュフラッディング DoS に耐性があります。
TLSH ファジーハッシュsgcTLSH、sgcTLSH_Init/_Update/_Finalほぼ重複するデータの検出向けの局所性鋭敏型ハッシュで、暗号学的ダイジェストではありません。
TLSH 類似度スコアsgcTLSH_Diff2 つの TLSH ダイジェスト間の距離。値が小さいほど類似しています。

Ed25519/Ed448、X25519/X448、secp256k1、Brainpool & RSA

5 種類の異なる曲線ファミリーと RSA にまたがって、署名、検証、共有秘密の導出を行います。

機能関数備考
Ed25519 署名 / 検証sgcEd25519_Sign / sgcEd25519_Verify, sgcEd25519_PublicKeyRFC 8032。公開鍵は 32 バイト、署名は 64 バイトです。検証は 5.1.7 節に従い、非正準の点と S >= L を拒否します。署名は秘密スカラーとメッセージごとのノンスに対して定数時間で行われます。4 ビット固定ウィンドウを使い、テーブルのエントリは 16 個すべてをマスクの下で走査して選択し、5.1.4 節の完全加算公式を用います。公開鍵は 32 バイトのシードから得られます。
X25519 鍵交換sgcX25519、sgcX25519_PublicKey、sgcX25519_SharedSecretCurve25519 上の RFC 7748 Diffie-Hellman。
Ed448 署名 / 検証sgcEd448_GenerateKeyPair、sgcEd448_Sign、sgcEd448_VerifyRFC 8032、448 ビット(Goldilocks)の EdDSA 曲線です。
X448 鍵交換sgcX448、sgcX448_PublicKey、sgcX448_SharedSecretCurve448 上の RFC 7748 Diffie-Hellman。
secp256k1eccSecp256k1 を指定した sgcECDSA_SignHash / VerifyHashsgcCrypto_ECCurves にある、SEC 2 の Bitcoin/Ethereum 曲線です。
Brainpool P256r1 / P384r1 / P512r1eccBrainpoolP256r1 / P384r1 / P512r1 を指定した同じ関数群RFC 5639。EU の eIDAS や政府プロファイルで一般的です。
NIST P-256 / P-384 / P-521eccP256 / eccP384 / eccP521 を指定した同じ関数群TsgcECCurve は現在7種類の曲線を持つため、鍵生成、署名、検証、ECDH、点圧縮のすべてが、PEM ファイルからだけでなく生の鍵バイト列からも NIST 素数曲線に到達できます。
決定論的 ECDSA ナンスsgcECDSA_SignHash に組み込みRFC 6979。ナンスは秘密鍵とメッセージから導出され、乱数生成器の失敗モードがありません。
定数時間のスカラー倍算sgcECDSA_SignHash、sgcECDH_SharedSecret および EC 鍵生成の内部sgcCrypto_ECCurves のすべての曲線が同じエンジンで動作します。データに依存するステップを持たない Montgomery 還元、個数が曲線から決まる固定ウィンドウ、すべてのエントリをマスクの下で走査して選択するテーブル、どのケースが該当するかを座標を見て判断することのない完全加算公式です。sgcCrypto_EC の JOSE、WebAuthn、E2EE の各経路も同じコードを実行します。
ECDH(secp256k1 / Brainpool)sgcECDH_SharedSecret同じ 4 種類の曲線上での共有秘密。
ポイント圧縮sgcEC_Compress / sgcEC_Decompressより短い圧縮形式の公開鍵を保存または送信します。
JWS としての EC(ES256/384/512)sgcECDSA_SignJWS / sgcECDSA_VerifyJWS要求されたビット長から曲線を自動選択し、PEM 鍵から直接署名/検証する、ECCurves の JOSE 向け姉妹ユニットです。
汎用 ECDHsgcECDHraw の秘密鍵と相手の公開点から共有秘密を導出します。
raw / DER の ECDSA 検証sgcECDSA_VerifyRaw / sgcECDSA_VerifyDERraw の (Qx, Qy, r, s) タプル、または DER エンコードされた署名を検証します。
DER ECDSA 署名と変換sgcECDSA_SignDER / sgcECDSA_VerifyDER、sgcECDSA_RawToDER / sgcECDSA_DERToRawX.509、CMS、TLS は、INTEGER r の後に INTEGER s が続く SEQUENCE である DER の ECDSA-Sig-Value を使用します。JOSE と WebAuthn は代わりに生の R || S ペアを使用します。どちらの形式にも直接署名でき、既存の署名を両者の間で変換することもできます。
Schnorr 署名(BIP-340)sgcSchnorr_PublicKey、sgcSchnorr_Sign、sgcSchnorr_Verifysecp256k1 専用で、x 座標のみの 32 バイト公開鍵と 64 バイトの署名を使用します。Taproot、Nostr、Lightning が使用しているものです。sgcSchnorr_TaggedHash が公開されているのは、BIP-341 と BIP-342 のタグを同じ構成の上に構築できるようにするためです。
RSA 署名(PKCS#1 v1.5)sgcRSA_SignPKCS1PEM 秘密鍵から、SHA-1/256/384/512 ダイジェストで署名します。
RSA 秘密鍵演算sgcRSA_SignPKCS1 と sgcCrypto_RSA_Keys のその他の署名および復号の呼び出し各演算は新しい乱数のペアでブラインディングされ、固定ウィンドウのべき乗と、タイミングが因数やデータに依存しない CRT 再結合を経て、結果を返す前に公開指数で検証されます。CRT の片方に障害が生じると、1 回の署名で因数が漏れてしまうため、不一致の場合は何も返されません。
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_DecryptRFC 8017 の Optimal Asymmetric Encryption Padding。
独立した MGF1 ハッシュを持つ RSA-OAEP5 パラメータの 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_DecryptRFC 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_ExportPublicKeyPEMJava、.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 / opensgcECIES_GenerateKeyPair、sgcECIES_Seal、sgcECIES_OpenX25519 公開鍵に対するハイブリッド暗号化。エフェメラル ECDH と AEAD を組み合わせ、往復とも 1 回の呼び出しです。

X.509 証明書 & ASN.1

他者が発行した証明書を読み取るか、自分で生成するか。どちらの裏にも DER エンコーダーとデコーダーがあります。

機能関数備考
DER リーダーsgcASN1_Read、sgcASN1_Next、sgcASN1_ContentDER 構造をノードごとにたどります。
厳格な DERsgcASN1_Read, sgcASN1_IsMinimalUnsignedIntegerこのユニットが読み取る構造はすべて仕様上 DER であるため、長さは DER の規則に従って扱われます。不定長形式は拒否され、短形式で表せる長さの長形式も拒否されます。INTEGER が最小限にエンコードされていない ECDSA 署名も拒否されるため、1 つの署名を 2 通りに書いて 2 つの異なる値として受け取られることはありません。
PEM コーデックsgcPEM_Decode / sgcPEM_EncodeRFC 7468。DER を囲む -----BEGIN ... -----END ラッパーです。
RSA 鍵解析sgcASN1_ParseRSAPrivateKey / PublicKeyPKCS#1(RFC 8017)の鍵構造です。
EC 鍵解析sgcASN1_ParseECPrivateKey / PublicKeySEC 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_Parsesubject、issuer、有効期間、公開鍵、拡張を含む完全な証明書構造です。
署名 / チェーン検証sgcX509_VerifySignedBy、sgcX509_VerifyChain1 つの証明書を発行者に対して検証するか、DER 証明書の配列をたどって検証します。
CRL 解析 & 失効確認sgcX509_CRL_Parse、sgcX509_IsRevoked、sgcX509_CRL_VerifySignedBy証明書失効リストを解析し、シリアル番号を照合します。
名前のフォーマットsgcX509_SubjectRFC2253、sgcX509_IssuerRFC2253、sgcX509_SubjectOneLineロギングや表示向けの RFC 2253 識別名文字列です。
拡張 & SANsgcX509_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 署名の証明書と CSRsgcX509_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_SLHDSAKeyML-DSA または SLH-DSA の鍵を TsgcX509SignKey でラップし、sgcX509_CreateSelfSignedEx、sgcX509_CreateCSREx、または CA の発行関数に渡します。ML-DSA は RFC 9881、SLH-DSA は RFC 9909 です。
ML-KEM 証明書subject 鍵に ML-KEM を指定した sgcX509_CreateSignedRFC 9935。CA は ML-KEM 公開鍵を証明できます。ML-KEM は署名ができないため、証明書を発行する前に所持の証明を別の方法で行う必要があります。
読み取り時の耐量子鍵種別TsgcX509PublicKeyTypex509pkRSA、x509pkEC、x509pkEd25519 に加えて x509pkMLDSA、x509pkSLHDSA、x509pkMLKEM があります。sgcX509_Parse、sgcX509_VerifySignedBy、sgcX509_CSR_Verify はいずれもこれらを扱います。
チェーンの制約sgcX509_VerifyChainbasicConstraints の pathLenConstraint と、dNSName、iPAddress、rfc822Name、uniformResourceIdentifier、directoryName にわたる nameConstraints 拡張を強制します。
生成時の nameConstraintsTsgcX509Options.PermittedDNSNames、ExcludedDNSNames、PermittedIPRanges、ExcludedIPRanges許可および除外するサブツリーを CA 証明書に書き込みます。上のチェーン検証がそれを強制できるようになります。
IPv6 アドレス SANTsgcX509Options.IPAddressesIPv4 に加えて、RFC 4291 のいずれの表記形式の IPv6 も受け付けます。
PEM 出力sgcX509_ToPEM生成した DER を、すぐに保存できる PEM ファイルとしてラップします。

ML-KEM、ML-DSA & SLH-DSA

NIST が 2024 年 8 月に FIPS 203、204、205 として確定した 3 つのアルゴリズムに加え、移行期間向けのハイブリッドコンバイナーです。

機能関数備考
ML-KEM 鍵生成sgcMLKEM_GenerateKeyPair、sgcMLKEM_GenerateKeyPairFromSeedFIPS 203、旧称 Kyber。3 種類のパラメータセット: mlkem512、mlkem768、mlkem1024。
ML-KEM カプセル化sgcMLKEM_Encapsulate, sgcMLKEM_EncapsulateWithSeed新しい 32 バイトの共有秘密と、それを運ぶ暗号文を生成します。公開鍵には最初に FIPS 203 の 7.2 節の入力チェックが行われるため、長さが誤っているもの、またはモジュラスのチェックに失敗するものは例外を発生させます。
ML-KEM デカプセル化sgcMLKEM_Decapsulate長さが正しいが復号できない暗号文は、エラーではなく擬似乱数の秘密(implicit rejection)を生成するため、タイミングやエラーの挙動から何も漏れません。長さが誤っている暗号文や秘密鍵、ハッシュ検査に失敗する秘密鍵は、FIPS 203 の 7.3 節の入力チェックに従い、先に例外を発生させます。
ML-KEM のサイズsgcMLKEM_PublicKeySize、PrivateKeySize、CiphertextSize、SharedSecretSizeバッファサイズを決めるための、パラメータセットごとのバイト長です。
ハイブリッド X25519 + ML-KEMsgcHybrid_GenerateKeyPair、sgcHybrid_Encapsulate、sgcHybrid_Decapsulate古典的な共有秘密と耐量子の共有秘密を KDF で組み合わせ、結果が X25519 単体より弱くなることはありません。ML-KEM を今日デプロイする際の推奨方法です。
ML-DSA 鍵生成sgcMLDSA_GenerateKeyPair、sgcMLDSA_GenerateKeyPairFromSeedFIPS 204、旧称 Dilithium。3 種類のパラメータセット: mldsa44、mldsa65、mldsa87。
ML-DSA 署名 / 検証sgcMLDSA_Sign / sgcMLDSA_VerifyFIPS 204 インターフェースに従った決定論的または確率的な署名、そしてコンテキスト文字列。
ML-DSA のサイズsgcMLDSA_PublicKeySize、PrivateKeySize、SignatureSizeパラメータセットごとのバイト長です。
SLH-DSA 鍵生成sgcSLHDSA_GenerateKeyPair、sgcSLHDSA_GenerateKeyPairFromSeedFIPS 205、旧称 SPHINCS+。ステートレスなハッシュベース署名で、安全性は格子や曲線の仮定ではなくハッシュ関数のみに依拠します。
SLH-DSA 署名 / 検証sgcSLHDSA_Sign / sgcSLHDSA_Verify6 種類の SHAKE パラメータセット: slhShake128s、slhShake128f、slhShake192s、slhShake192f、slhShake256s、slhShake256f。s 系は署名の小ささ、f 系は署名の速さを優先します。
SLH-DSA のサイズ & 命名sgcSLHDSA_PublicKeySize、PrivateKeySize、SignatureSize、sgcSLHDSA_ParamsNameSLH-DSA の署名は大きく(セットにより 7.8 KB から 49 KB)、署名前にバッファサイズを決めてください。
公開鍵のエクスポート & インポート、DERsgcMLDSA_ExportSubjectPublicKeyInfo / ImportSubjectPublicKeyInfo、および同じ構成の sgcMLKEM_* と sgcSLHDSA_* の組X.509 SubjectPublicKeyInfo です。耐量子の公開鍵も、RSA や EC と同じ構造に収まります。RFC 9881、RFC 9909、RFC 9935。
秘密鍵のエクスポート & インポート、DERsgcMLDSA_ExportPrivateKeyInfo / ImportPrivateKeyInfo、および sgcMLKEM_* と sgcSLHDSA_* のペアPKCS#8 OneAsymmetricKey、バージョン 0 と 1。インポートでは鍵の整合性が検査されます。埋め込まれた公開鍵が一致しない場合は拒否され、同じ鍵のシード形式と展開形式は一致していなければならず、ML-DSA の鍵は保存されている t0 と tr を再現できなければなりません。SLH-DSA はシードから PK.root を再計算し、そのコストは鍵生成 1 回分ほどです。そのためこれらのインポートには aVerify パラメーターがあり、既定は True ですが、自分のアプリケーションが生成した鍵には False を渡せます。
PEM のエクスポート & インポートsgcMLDSA_ExportPublicKeyPEM、ExportPrivateKeyPEM、ImportPublicKeyPEM、ImportPrivateKeyPEM、および sgcMLKEM_* と sgcSLHDSA_* の一式RFC 7468、-----BEGIN ... -----END ラッパーです。PKI のほかの部分と同じファイルおよびツールでそのまま扱えます。
秘密鍵の形式TsgcPQCPrivateKeyFormatML-DSA と ML-KEM の秘密鍵には 3 つの形式があります。pqkfSeed はシードのみを書き出し(ML-DSA は 32 バイト、ML-KEM は 64 バイトの d||z シード)、pqkfExpanded は展開済みの鍵を書き出し、pqkfBoth は両方を保持します。SLH-DSA の秘密鍵形式は 1 つだけです。
シードも返す鍵生成sgcMLDSA_GenerateKeyPairAndSeed、sgcMLKEM_GenerateKeyPairAndSeed鍵ペアとともにシードも返すため、生成の直後にシード形式の PKCS#8 または PEM ファイルを書き出せます。
X-Wing ハイブリッド KEMsgcXWing_GenerateKeyPair、sgcXWing_Encapsulate、sgcXWing_Decapsulatedraft-connolly-cfrg-xwing-kem-10。X25519 と ML-KEM-768 を 1 つの KEM としてまとめたものです。公開鍵 1216 バイト、秘密鍵 32 バイト(シード)、暗号文 1120 バイト、共有秘密 32 バイト。
TLS 1.3 のハイブリッド鍵共有sgcTLSHybrid_ClientKeyShare、sgcTLSHybrid_ServerKeyShare、sgcTLSHybrid_ClientSharedSecret、sgcTLSHybrid_GroupName、sgcTLSHybrid_AvailableRFC 10024 のグループ X25519MLKEM768、SecP256r1MLKEM768、SecP384r1MLKEM1024(IANA コードポイント 0x11EC、0x11EB、0x11ED)です。これらは単体の KEM ではなく、TLS の鍵共有を構築するだけのものです。
JSON Web Token 向けの ML-DSAJWTOptions.Algorithms.MLDSA.PrivateKey、PublicKey、Enabled、sgcMLDSA_ExportPublicJWK、sgcMLDSA_ExportPrivateJWK、sgcMLDSA_ImportJWK、sgcMLDSA_ImportJWKAsPEMRFC 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 Web Key に対応します。この経路のどこにも OpenSSL は関与しません。
既知解の検証NIST ACVP ベクターML-KEM の鍵生成、カプセル化、デカプセル化、そして ML-DSA と SLH-DSA の鍵生成、署名生成、署名検証は、sgcWebSockets の QA スイートで NIST ACVP の既知解ベクターと照合されます。

sgcCrypto は ed25519187 や SPECK を実装していません。ed25519187 には公開された仕様がなく、SPECK は 2018 年に ISO 標準化から取り下げられているため、いずれもここには実装していません。

これらのユニットの上に構築された TLS 1.3 および TLS 1.2 スタック

sgcCrypto のプリミティブの上に Object Pascal で書かれ、同じパックに同梱されています。sgcCrypto_* ではなく sgcSSL_NativeTLS* のユニットにあるため、上で数えた 43 ユニットには含まれません。

機能API備考
クライアントでの選択TLSOptions.IOHandler := iohNativeTLSOpenSSL、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 が既定になります。3 つのハイブリッドグループは 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 5246TLS 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 またはプラットフォームのバックエンドを使い続けてください。

ワンタイムパスワード、コーデック & 暗号化 ZIP

ユーティリティ層です。ワンタイムコード、他のすべてのファミリーが頼るエンコーディング、そして WinZip AES 暗号化です。

機能関数備考
HOTPsgcHOTPRFC 4226、カウンターベースのワンタイムパスワード。
TOTPsgcTOTP、sgcTOTP_FromBase32RFC 6238、時刻ベースのワンタイムパスワード。Base32 版は、認証アプリが表示するそのままの形式でシークレットを受け取れます。
TOTP 検証sgcTOTP_Verify送信されたコードを、ステップのウィンドウにわたって定数時間でチェックするため、結果もその位置もタイミングから漏れません。リプレイ自体は防がないため、使用済みコードの追跡は呼び出し側で行います。
定数時間比較sgcConstantTimeEqualsライブラリ全体で、タグや MAC の比較に使われます。
セキュアゼロ化sgcSecureZero鍵材料がメモリに残らないよう、バイトバッファを上書きします。
HexsgcHexEncode / sgcHexDecode小文字の hex で、デコードは大文字小文字を区別しません。
Base64urlsgcBase64UrlEncode / sgcBase64UrlDecodeRFC 4648 section 5、パディングなし。JWT と JOSE が使うエンコーディングです。
Base32sgcBase32Encode / sgcBase32DecodeRFC 4648 section 6。TOTP のシークレットと認証アプリが使うエンコーディングです。
WinZip AES 鍵導出sgcZipAE2_DeriveKeysパスワードとソルトから、PBKDF2 ベースの鍵、認証鍵、パスワード検証子を導出します。
WinZip AES 暗号化 / 復号sgcZipAE2_Encrypt / sgcZipAE2_DecryptAE-1 と AE-2、AES-128/192/256。TsgcZipAESStrength によるエントリごとのソルトサイズ設定です。
WinZip エントリパッキングsgcZipAE2_PackEntry / sgcZipAE2_UnpackEntryソルト、検証子、暗号文、認証コードを、ディスク上のレイアウトに組み合わせます。
WinZip 拡張フィールドsgcZipAE2_BuildExtraField / sgcZipAE2_ParseExtraFieldZIP エントリが AES 暗号化されていることを示す 0x9901 拡張フィールドです。
レガシーハッシュ(相互運用専用)sgcMD4、sgcMD5、sgcHMAC_MD5古い形式やプロトコルの読み取り用に残しています。新しい設計には使わないでください。
レガシー暗号(相互運用専用)sgcDES_EncryptECB / sgcDES_DecryptECB、sgcDES_NTLM7to8DES-ECB と DES ベースの NTLM 鍵拡張ステップです。どちらも取り下げられていますが(FIPS 46-3)、レガシーとの相互運用のために残しています。
セキュアな乱数バイトsgcRandomBytes / sgcRandomFillMSWINDOWS では BCryptGenRandom(Windows CNG)、それ以外では /dev/urandom。どちらも同じ呼び出しです。

sgcCrypto の対応範囲

サポート内容を正確に記載しています。

項目詳細
オペレーティングシステムsgcVer.inc の中で SGC_CRYPTO を囲む MSWINDOWS ガードや、その他のプラットフォームガードは一切ありません。43 ユニットすべてが Win32、Win64、Linux64、macOS、iOS、Android 向けにコンパイルされます。
乱数ソース唯一プラットフォームを意識するユニット sgcCrypto_Random は、対象ごとに CSPRNG を選択します。MSWINDOWS では BCryptGenRandom(Windows CNG)、POSIX 系のターゲットでは /dev/urandom を、同じ sgcRandomBytes 呼び出しの裏側で行います。バイトは OS の乱数生成器から直接取得され、独自の生成器を上に重ねることはありません。Windows では BCryptGenRandom が利用できない場合に限り RtlGenRandom、次に CryptGenRandom を使用し、どのソースも読み取れない場合は弱いバイトを返さずに例外を発生させます。
FIPS モード既定では無効の条件定義 SGC_CRYPTO_FIPS で、コンパイル時に 43 ユニットから非承認のアルゴリズムをすべて取り除き、実行時にいくつかのパラメーター規則を検査します。ライブラリを FIPS 承認アルゴリズムの範囲内に保ちますが、sgcCrypto は FIPS 140-3 の認証を受けたモジュールではなく、この定義も認証を主張するものではありません。FIPS モード
DelphiDelphi 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 のソースコードが提供されます。
再配布ビルドしたバイナリはロイヤリティフリーで、シート単位やサーバー単位のランタイム費用もありません。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

sgcCrypto で構築する

無料体験版をダウンロードして、関数を呼び出すだけです。コンポーネントは不要です。