AWS-LC を Erlang/OTP で利用する
Erlang/OTP は crypto という暗号ライブラリが含まれているんですが、これはデフォルトでは OpenSSL を利用します。libressl も一応動きますが、テストなどは OpenSSL 前提です。
OpenSSL 以外の道を検討していたのですが、Rust で Rustls の暗号バックエンドに aws-lc-rs が推奨されていたこともあり、AWS-LC を Erlang/OTP の crypto モジュールのバックエンドに利用できないか試してみました。
ちなみに AWS LC は OpenSSL を Google がフォークした BoringSSL のフォークです。
https://github.com/erlang/otp/compare/master...voluntas:otp:feature/aws-lc-support
結果としてはいくつかの制限はありますが、問題無く動きました。
Erlang/OTP 28 [erts-16.2] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]
Eshell V16.2 (press Ctrl+G to abort, type help(). for help)
1> crypto:info_lib().
[{<<"OpenSSL">>,269488255,<<"AWS-LC 1.66.2">>}]
2> crypto:supports().
[{hashs,[sha,sha224,sha256,sha384,sha512,sha3_224,sha3_256,
sha3_384,sha3_512,shake128,shake256,md4,md5]},
{ciphers,[aes_256_ofb,aes_192_ofb,aes_128_ofb,blowfish_ecb,
blowfish_ofb64,blowfish_cfb64,blowfish_cbc,des_ecb,des_cbc,
rc4,aes_128_cbc,aes_192_cbc,aes_256_cbc,aes_128_cfb128,
aes_192_cfb128,aes_256_cfb128,aes_128_cfb8,aes_192_cfb8,
aes_256_cfb8,aes_128_ecb,aes_192_ecb,aes_256_ecb,
chacha20_poly1305,aes_256_gcm,aes_256_ccm|...]},
{kems,[]},
{public_keys,[rsa,dss,dh,ecdsa,ecdh,eddsa,eddh,srp]},
{macs,[cmac,hmac]},
{curves,[secp224r1,secp256k1,secp384r1,secp521r1,secp256r1,
prime256v1,ed25519,x25519]},
{rsa_opts,[rsa_pkcs1_pss_padding,rsa_pss_saltlen,
rsa_mgf1_md,rsa_pkcs1_oaep_padding,rsa_oaep_label,
rsa_oaep_md,signature_md,rsa_pkcs1_padding,rsa_x931_padding,
rsa_no_padding]}]The State of SSL Stacks
The SSL landscape has shifted dramatically. In this paper, we examine OpenSSL 3.x, BoringSSL, LibreSSL, WolfSSL, and AWS-LC with HAProxy.

AWS-LC
AWS-LCは2019年に開始されたBoringSSL(および間接的にOpenSSL)のフォーク版で、AWSとその顧客向けに設計されています。AWS-LCはセキュリティとパフォーマンス(特にAWSハードウェア上での性能)を重視しています。BoringSSLとは異なり、後方互換性のあるAPIを維持することを目的としており、メンテナンスが容易な設計となっています。
最近、AWSチームから連絡があり、HAProxyをAWS-LCと互換性を持たせるためのパッチを提供いただきました。これにより、CI環境を通じて定期的に両者の連携テストを実施できるようになりました。HAProxyは過去にBoringSSLへ移植された経緯があるため、その際に対応済みだった多くの機能を既に継承しています。
AWS-LCは最新のTLS機能とQUICプロトコルをサポートしています。HAProxyにおいては、OpenSSL 1.1.1と同等の機能をサポートしていますが、現在では使用されていない古い暗号方式(CCM、DHEなど)は実装されていません。また、BoringSSLで既に削除されているエンジンサポート機能も含まれていません。
FIPS認定暗号モジュールを提供しており、定期的にFIPS認証の審査を受けています。
AWS-LC: 機能は概ね充実しており、メンテナンスも行われています。頻繁なリリースが行われており動作も比較的高速ですが、現時点では専用の長期サポート(LTS)ブランチは提供されていません。