AWS s2n: 6,000行ほどのオープンソースTLS実装

Amazon Web Servicesがs2n発表した。これは “signal to noise” を縮めたもので、TLS/SSLプロトコルのオープンソース実装だ。「シンプルで、小さく、高速で、安全であることを優先して」作られている。

Amazonによると、TLSプロトコルで課題なのはその複雑さだという。そのことが「デファクトリファレンス実装」であるOpenSSLの50万行のうち、少なくとも7万行に及ぶTLS実装をもたらした。これほど大きくなると「コード監査、セキュリティレビュー、パフォーマンス、効率における課題」となる。

これに対し、ほとんど使われていないオプションや拡張、セッション再ネゴシエーションやDTLSのような脆弱性のある機能を実装しないことで、s2nはそのサイズを、C99のコードで6,000行あまりにおさえている。Amazonによると、そのおかげでs2nはレビューしやすく、すでに3つの外部セキュリティ評価とペネトレーションテストを受けているという。加えて、s2nは安全性を改善するための仕組みを取り入れている。

  • リード時消去: 復号されたデータバッファはアプリケーションが読むとすぐに消去される。
  • 区分けされた乱数生成: s2nは2つの乱数生成器を使う。ひとつは平文で見えるおそれのあるパブリックデータのため、もうひとつはプライベートデータのため。
  • モジュール化された暗号: s2nではOpenSSL、LibreSSLなど別の暗号ライブラリを使える。
  • Cの安全性: メモリ、文字列、シリアライゼーションへの全アクセスの強制境界チェックなど、s2nはC99とその標準ライブラリにまつわる負担を軽減するためのテクニックを使っている。

現在、s2nはElastic Load Balancing、Amazon CloudFront、Amazon S3などを含むAWSサービスへの統合に必要な全機能を実装しており、「この数か月で」ロールアウトが始まるだろう。重要なことは、TLSは標準プロトコルなので、外部アプリケーションを変更する必要はないはずだ。

APIに関して、s2nはPOSIX I/O APIに準拠するよう設計されている。なじみのある開発者は直感的に使えるはずだ。興味深いことに、s2nはロックやミューテックスを使っていない。

Amazonによると、s2nはOpenSSLのlibsslに例えて考えることができるという。s2nはApache Software License 2.0で公開されている。