sgcCrypto:面向 Delphi 和 C++ Builder 的全新加密库 | eSeGeCe 博客

sgcCrypto:面向 Delphi 和 C++ Builder 的全新加密库

· 组件
面向 Delphi 和 C++ Builder 的 sgcCrypto 加密库

sgcCrypto 是一个全新的通用加密库,适用于 Delphi 和 C++ Builder:43 个纯 Object Pascal 单元,涵盖对称加密、哈希、数字签名、PKI 和后量子密钥交换。它没有设计时组件,没有 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_HKDFsgcCrypto_ScryptsgcCrypto_Argon2,后者实现了全部三种 Argon2 变体:d、i 和 id,也就是 Password Hashing Competition 的获胜方案。sgcCrypto_SipHash 为哈希表键提供了一种快速的带密钥哈希,而 sgcCrypto_TLSH 是一种模糊相似度哈希,适用于近似重复检测,而非作为加密摘要使用。

签名、密钥交换与 PKI

sgcCrypto_Ed25519sgcCrypto_Ed448 负责签名与验证,sgcCrypto_X25519sgcCrypto_X448 完成相应的 Diffie-Hellman 密钥交换。sgcCrypto_ECCurves 在 secp256k1 和三条 Brainpool 曲线上增加了 ECDSA 和 ECDH,并使用 RFC 6979 确定性随机数,sgcCrypto_RSA_Keys 涵盖任意位长的 RSA 密钥生成、OAEP 加密和 PSS 签名。

在 PKI 方面,sgcCrypto_X509 可以解析证书、验证证书是否由指定颁发者签发、遍历并验证证书链,以及通过 CRL 检查吊销状态。sgcCrypto_X509_Gen 可以从零生成自签名 X.509 证书或 PKCS#10 CSR,包括使用者备用名称、密钥用途和 CA 路径长度约束,底层依托一个专为此目的构建的 DER 写入器。

后量子密码学

sgcCrypto 还实现了 NIST 的三项后量子标准。sgcCrypto_MLKEM 是 FIPS 203 密钥封装,覆盖全部三种参数集:ML-KEM-512、768 和 1024,并对畸形密文采用隐式拒绝,确保错误输入永远不会泄露信息。sgcCrypto_MLDSA 是 FIPS 204 签名,即 ML-DSA-44/65/87,sgcCrypto_SLHDSA 则是 FIPS 205,覆盖全部六种 SHAKE 参数集。由于格密码假设比椭圆曲线更年轻,sgcCrypto_MLKEM_Hybrid 将一个 X25519 密钥与一个 ML-KEM 密钥合并为一个共享密钥,这正是业界正在趋同的混合迁移模式。

可用性

sgcCryptosgcWebSockets Standard、Professional 和 Enterprise 免费提供,All-Access 同样包含。如果你已经拥有其中任意一种许可证,这 43 个单元已经包含在你的安装程序中,无需另行订购。如果你只拥有 sgcWebSockets Core,或者完全没有 sgcWebSockets 许可证,sgcCrypto 也作为独立产品包单独销售,并捆绑了 Core 运行库。无论是随附许可证还是独立产品包,都附带完整的 Pascal 源代码和一年的更新服务。

你可以在 sgcCrypto 产品页面阅读完整的单元参考文档并亲自试用。

有疑问或反馈?联系我们,回复你的正是编写这些代码的人。