| 原作者 | ダニエル・J・バーンスタイン、ターニャ・ランゲ、ピーター・シュワーベ |
|---|---|
| 初回リリース | 2008年 |
| 安定リリース | 20110221 / 2011年2月21日 |
| オペレーティング·システム | UNIXライク |
| ライセンス | パブリックドメイン[1] |
| Webサイト | nacl.cr.yp.to |
NaCl( Networking and Cryptography Library、「ソルト」と発音)は、パブリックドメインの高速暗号化ソフトウェアライブラリ。 [2]
NaCl は、 qmailやCurve25519の作成で最もよく知られている数学者でプログラマーのDaniel J. Bernsteinによって作成されました。コアチームにはTanja Langeと Peter Schwabe も含まれています。[3] [4]チームの 2011 年の論文によると、NaCl を作成する際の主な目標は、「以前の暗号化ライブラリが被ったさまざまな種類の暗号化災害を回避すること」でした。チームは、サイドチャネル漏洩やランダム性の損失などの問題を回避するより安全な設計、ユーザーが安全機能を無効にしないほど十分なパフォーマンス、およびより優れた暗号化プリミティブの選択によってこれを実現します。高レベルの「ボックス」API は、認証された暗号化の使用を促進するように設計されています。[1]
機能
公開鍵暗号
crypto_box公開鍵認証暗号化。鍵共有はX25519を介して行われ、暗号化はSalsa20-Poly1305によって行われる。[5]crypto_scalarmultX25519上のスカラー乗算。この関数は楕円曲線 Diffie–Hellmanに使用できます。crypto_signEd25519および SHA-512 を使用した署名。
秘密鍵暗号
crypto_secretboxSalsa20-Poly1305を使用した秘密鍵認証暗号化。crypto_streamSalsa20 、 XSalsa20、またはAES を使用した暗号化。crypto_authHMAC -SHA-512-256を使用した認証。crypto_onetimeauthPoly1305を使用した単一メッセージ認証。
低レベル関数
実装
リファレンス実装はCで書かれており、多くの場合、複数のインラインアセンブラが使用されています。C ++はラッパーとして扱われます。Pythonラッパーも計画されていましたが[8]、最新リリース (20110221) には含まれていません。2016 年に最終更新されたホームページには、プロトタイプラッパーについて記載されています。[2]
参考NaClにはPHP [9]やTcl [10]などのさまざまなプログラミング言語バインディングがあります。 [サードパーティソースが必要]
リボナトリウム
Libsodiumは、2013年に作成されたリファレンスNaClのAPI互換フォークです。これは「インストール可能かつパッケージ化可能」であり、言い換えれば、ビルドファイルの追加により動的ライブラリにコンパイルされ、ソフトウェアパッケージとしてインストールできます(NaClにはビルドファイルはありませんでした)。また、「移植可能かつクロスコンパイル可能」でもあります。[11]
libsodiumは動的にリンクできるため、 Pharo、[12]、 Perl 5、[13] 、Python [ 14]などの言語での多くのバインディングの基盤として機能します。[ 15]
libsodiumはNaCl APIを新しいアルゴリズム(BLAKE2、[16] ChaCha20-Poly1305、AEGISなど)[17]と新しいクラスの関数(セキュアメモリ、乱数生成、ショート入力ハッシュ[18] パスワードハッシュとキー導出など)で拡張します。
ツイートNaCl
2013年、NaClチームと他の3人がTweetNaClをリリースしました。これはNaClの25個の機能を100ツイート(各140シンボル)のサイズに収まるように凝縮した実装です。 [19]
TweetNaClは、TweetNaCl.js [20]やTweetNaCl-Java [21]などの移植版の基盤として使用されています。また、 SPARK AdaサブセットでSPARKNaClとして書き直されており、著者らは「(TweetNaClとは異なり)コード内に多数の説明コメントと契約があるため読みやすい」と説明しています。[22]
その他の実装
- dryoc —保護されたメモリをサポートするlibsodium/NaCl APIを実装した純粋なRust暗号化ライブラリ。[23]
- Monocypher — C言語でNaClを書き直したもの。NaClの参照速度とTweetNaClのサイズを実現することを目指している。[24]
参照
参考文献
- ^ ab Daniel J. Bernstein、Tanja Lange、Peter Schwabe。「新しい暗号化ライブラリのセキュリティへの影響」(PDF) 。 2017年8月9日時点のオリジナルよりアーカイブ(PDF) 。
- ^ ab "NaCl: ネットワークおよび暗号化ライブラリ"。
- ^ 「Tanja Langeのホームページ」。
- ^ 「ピーター・シュワベのホームページ」。
- ^ Bernstein, Daniel J. (2009年3月10日). Cryptography in NaCl (PDF) . 2017年3月25日時点のオリジナルよりアーカイブ(PDF) . 2016年2月8日閲覧。
- ^ 「ハッシュ: crypto_hash」 2010-08-30 . 2015-11-14閲覧。
- ^ 「文字列比較: crypto_verify」。nacl.cr.yp.to 。 2024年1月19日閲覧。
- ^ 「NaCl内部構造」。
- ^ 「NaCl PHP 拡張機能」。Github。2019 年 6 月 14 日。
- ^ 「Tclers Wiki - Tcl 用 NaCl」。
- ^ Denis, Frank (2024年1月18日). 「libsodium: 最新かつポータブルで使いやすい暗号ライブラリ」
- ^ 「SmalltalkHub リポジトリ」。
- ^ 「Crypt::NaCl::Sodium」.
- ^ Python Cryptographic Authority (2024 年 1 月 18 日). 「pyca/pynacl」. GitHub .
PyNaCl は、Networking and Cryptography ライブラリのフォークである libsodium への Python バインディングです。
- ^ 「他の言語のバインディング」。libsodium。
- ^ 「Generic hashing」 2017年12月13日. 2018年5月19日閲覧。
- ^ 「AEAD 構造」. libsodium .
- ^ 「ショート入力ハッシュ」libsodium。
- ^ ダニエル・J・バーンスタイン;ベルナルド・ファン・ガステル。ウェスリー・ヤンセン。タンジャ・ランゲ。ピーター・シュワーベ;シャーク・スメッツァース (2013)。 「ツイートNaCl」。
- ^ 「TweetNaCl.js」.
- ^ 「TweetNaCl-Java」.
- ^ 「SPARKNaCl」.
- ^ 「Don't Roll Your Own Crypto (dryoc): 純粋な Rust で、誤用しにくい暗号化ライブラリ」。
- ^ Vaillant、Loup(2024年1月17日)。「LoupVaillant/Monocypher」。
外部リンク
- 公式サイト
