暗号ライブラリの比較

ウィキメディアの一覧記事

暗号ライブラリの比較(あんごうライブラリのひかく)では、暗号化アルゴリズムを扱い、サポートする各機能を呼び出すAPIを持つ暗号ライブラリを比較する。

暗号ライブラリ 編集

実装 開発元 開発言語 オープンソース ソフトウェアライセンス FIPS 140 検証[1] FIPS 140-2 モード 最新アップデート
Bouncy Castle Legion of the Bouncy Castle Inc. Java, C# Yes MIT License Yes Yes
CryptoComply SafeLogic Java, C No 商用版 Yes Yes Continuous
cryptlib Peter Gutmann C Yes Sleepycat License または 商用版 No[注釈 1] Yes
Crypto++ The Crypto++ project C++ Yes Boost Software License (すべての各ファイルは public domain) No No April 8, 2018 (7.0.0)
Moved to FIPS 140 Historical Validation List[注釈 2]
GnuTLS Nikos Mavrogiannopoulos, Simon Josefsson C Yes GNU LGPL v2.1+ Yes Yes 3.8.0 - 2023年2月9日 (14か月前) (2023-02-09)[2] [±]
Libgcrypt GnuPG community and g10code C Yes GNU LGPL v2.1+ Yes Yes
libsodium Frank Denis C Yes ISC license No No December 13, 2017 (1.0.16)
NaCl Daniel J. Bernstein, Tanja Lange, Peter Schwabe C Yes Public domain No No February 21, 2011[3]
Network Security Services Mozilla C Yes MPL 2.0 Yes[4] Yes 3.65 - 2021年5月13日 (2年前) (2021-05-13)[5] [±]

3.53.1 - 2020年6月16日 (3年前) (2020-06-16)[5] [±]

OpenSSL The OpenSSL Project C Yes Apache Licence 1.0 と 4-Clause BSD Licence Yes Yes 3.2.1 - 2024年1月30日 (2か月前) (2024-01-30)[6] [±]
wolfCrypt wolfSSL, Inc. C Yes GPL v2 または 商用版 Yes Yes 5.5.0 - 2022年8月30日 (19か月前) (2022-08-30)[7] [±]
  1. ^ 実際のcryptlibはFIPS 140検証されていないが、第三者の独自の商用製品の一部として使われたcryptlibが検証されている。
  2. ^ Crypto ++は2003年から2008年の3回のFIPS 140検証を受けた。2016年にNISTはCrypto ++をHistorical Validation Listに移行。このによりFIPS検証が取り消され、連邦政府機関は検証された暗号としてはこのモジュールを使用することができなくなっている。

鍵処理 編集

鍵処理には鍵生成アルゴリズム、鍵交換合意、公開鍵暗号標準が含まれる。

鍵生成と鍵交換 編集

実装 ECDH DH DSA RSA ElGamal NTRU DSS
Bouncy Castle Yes Yes Yes Yes Yes Yes Yes
CryptoComply Yes Yes Yes Yes Yes Yes Yes
cryptlib Yes Yes Yes Yes Yes No Yes
Crypto++ Yes Yes Yes Yes Yes No Yes
Libgcrypt Yes[注釈 1] Yes Yes Yes Yes No Yes
libsodium No Yes Yes No
No No
OpenSSL Yes Yes Yes Yes No No No
wolfCrypt Yes Yes Yes Yes No Yes Yes
  1. ^ 下位レベルのインターフェイス使用による。

楕円曲線暗号サポート 編集

実装 NIST SECG ECC Brainpool ECDSA ECDH Curve25519 EdDSA GOST R 34.10
Bouncy Castle Yes Yes Yes Yes Yes Yes
Yes
CryptoComply Yes Yes Yes Yes Yes Yes Yes Yes
cryptlib Yes Yes Yes Yes Yes
Crypto++ Yes Yes Yes Yes Yes Yes No No
Libgcrypt Yes Yes Yes Yes Yes Yes Yes Yes
libsodium Yes
Yes Yes
OpenSSL Yes Yes Yes Yes Yes Yes Yes Yes
wolfCrypt Yes Yes Yes Yes Yes Yes Yes No

公開鍵暗号標準 編集

実装 PKCS#1 PKCS#5 PKCS#8 PKCS#12 IEEE P1363 ASN.1
Bouncy Castle Yes Yes Yes Yes Yes Yes
CryptoComply Yes Yes Yes Yes Yes Yes
cryptlib Yes Yes Yes Yes No Yes
Crypto++ Yes Yes Yes[注釈 1] No Yes Yes
Libgcrypt Yes Yes[注釈 2] Yes[注釈 2] Yes[注釈 2] Yes[注釈 2] Yes[注釈 2]
libsodium No No No No No No
OpenSSL Yes Yes Yes Yes No Yes
wolfCrypt Yes Yes Yes Yes No Yes
  1. ^ ライブラリは、デフォルトでPEMなしでX.509およびPKCS#8エンコーディングを提供。公開鍵と秘密鍵のPEMエンコーディングでは、PEM Packが必要。
  2. ^ a b c d e Public Key Cryptographic Standards(PKCS)は、実際のlibgcryptライブラリではないが、GnuPGフレームワークの一部でもある付随するライブラリとツールでサポートされている。

ハッシュ関数 編集

サポートされている暗号化ハッシュ関数を比較する。メッセージのMACタグを生成するために使用される暗号を含む。ここではハッシュ関数は、任意の長さのメッセージから、元のメッセージの復号が実質不可能な固定サイズの出力を生成するものとして定義する。

実装 MD5 SHA-1 SHA-2 SHA-3 RIPEMD-160 Tiger Whirlpool GOST Stribog BLAKE2
Bouncy Castle Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
CryptoComply Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
cryptlib Yes Yes Yes Yes Yes No Yes No No No
Crypto++ Yes Yes Yes Yes Yes Yes Yes Yes No Yes
Libgcrypt Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
libsodium No No Yes No No No No No No Yes
OpenSSL Yes Yes Yes Yes Yes Yes Yes Yes
Yes
wolfCrypt Yes Yes Yes Yes Yes No No No No Yes

MACアルゴリズム 編集

メッセージ認証コード(MAC)アルゴリズムの実装を比較する。MACは、メッセージを認証するために使用される短い情報である。メッセージが指定された送信者から送信されたもので(真正性)、送信中に変更されていない(完全性)ことを確認するために用いられる。

実装 HMAC-MD5 HMAC-SHA1 HMAC-SHA2 Poly1305-AES BLAKE2-MAC
Bouncy Castle Yes Yes Yes Yes Yes
CryptoComply Yes Yes Yes Yes Yes
cryptlib Yes Yes Yes No No
Crypto++ Yes Yes Yes Yes Yes
Libgcrypt Yes Yes Yes Yes Yes
libsodium No No Yes Yes Yes
OpenSSL Yes Yes Yes Yes Yes
wolfCrypt Yes Yes Yes Yes Yes

ブロック暗号 編集

ブロック暗号の実装を比較する。ブロック暗号は、決定論的であり、対称鍵を用いて設定された数のビット(ブロックと呼ばれる)上で動作するものとして定義される。 各ブロック暗号は、実行可能な鍵サイズとブロック暗号モードに分割することができる。

ブロック暗号 アルゴリズム 編集

Implementation AES Camellia 3DES Blowfish Twofish CAST5 IDEA GOST 28147-89 ARIA
Bouncy Castle[8] Yes Yes Yes Yes Yes Yes Yes Yes Yes
CryptoComply Yes Yes Yes Yes Yes Yes Yes Yes
cryptlib[9] Yes No Yes Yes
Yes Yes
Crypto++ Yes Yes Yes Yes Yes Yes Yes Yes[注釈 1] Yes
Libgcrypt Yes Yes Yes Yes Yes Yes Yes Yes
libsodium Yes[注釈 2] No No No
OpenSSL Yes Yes Yes Yes No Yes Yes Yes Yes
wolfCrypt Yes Yes Yes No
Yes
  1. ^ Crypto ++は、1990年代からGOSTの64ビット版を提供。2015年からGOSTの128ビット版は提供していない。
  2. ^ libsodiumはAES-256のみを提供。AES-128、AES-192は提供していない。

暗号モード 編集

実装 ECB CBC OFB CFB CTR CCM GCM OCB XTS AES-Wrap Stream
Bouncy Castle Yes Yes Yes Yes Yes Yes Yes Yes
Yes Yes
CryptoComply Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
cryptlib Yes Yes Yes Yes
No Yes
Crypto++ Yes Yes Yes Yes Yes Yes Yes No No No Yes
Libgcrypt Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
libsodium No No
Yes No Yes
OpenSSL Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
wolfCrypt Yes Yes No Yes Yes Yes Yes No Yes No No

ストリーム暗号 編集

ストリーム暗号の実装を比較する。ストリーム暗号は、擬似乱数暗号の文字列と結合した平文文字列を使用する。ストリーム暗号は通常、ブロック暗号より高速でハードウェアの複雑さは減るが、攻撃の影響を受けやすくなる。

実装 RC4 HC-256 Rabbit Salsa20 ChaCha SEAL Panama WAKE Grain VMPC ISAAC
Bouncy Castle Yes Yes No Yes Yes No No No Yes Yes Yes
CryptoComply Yes Yes No Yes Yes No No No Yes Yes Yes
cryptlib Yes No No No No No No No No No No
Crypto++ Yes Yes Yes Yes Yes Yes Yes Yes No No No
Libgcrypt Yes No No Yes Yes No No No No No No
libsodium No No No Yes Yes No No No No No No
OpenSSL Yes No No No Yes No No No No No No
wolfCrypt Yes Yes Yes Yes Yes No No No No No No

ハードウェアによるサポート 編集

ハードウェア暗号の使用可否を比較する。特定のハードウェアを利用できる場合、ライブラリは高速化、および/またはセキュリティを向上させることができる。

Smartcard, SIMHSM プロトコルサポート 編集

実装 PKCS #11 PC/SC CCID
Bouncy Castle Yes [注釈 1]
CryptoComply Yes
cryptlib Yes
Crypto++ No
Libgcrypt Yes [10] Yes [11] Yes [11]
libsodium No
OpenSSL
wolfCrypt Yes
  1. ^ PKCS#11プロバイダ、または基本操作へのアクセスを提供するオペレータインターフェイスの実装を使用。

汎用 CPU / プラットフォームアクセラレーションサポート 編集

実装 AES-NI SSSE3 / SSE4.1 AVX / AVX2 RdRand VIA PadLock Intel QuickAssist AltiVec[注釈 1] ARMv7-A NEON ARMv8-A
CryptoComply Yes Yes Yes Yes Yes No
Yes Yes
cryptlib Yes Yes Yes Yes Yes No
No
Crypto++ Yes Yes Yes Yes Yes[注釈 2] No Yes Yes Yes
Libgcrypt[12] Yes Yes Yes Yes Yes No No Yes Yes
libsodium Yes Yes Yes
No No
No
OpenSSL Yes Yes Yes Yes[注釈 3] Yes No Yes Yes Yes
wolfCrypt Yes
Yes Yes No Yes[13]
Yes[14]
  1. ^ AltiVecには、POWER4からPOWER8までのSIMD処理が含まれる。POWER8は、SSEやARMv8.1に似たAESアクセラレータ、SHA、PMULを提供するメモリー内暗号化を追加。
  2. ^ Crypto ++は、Padlock乱数ジェネレータへのアクセスを提供。 AESアクセラレータのような他の機能は提供されていない。
  3. ^ OpenSSL RDRANDのサポートは、ENGINEインターフェースを介して提供される。 RDRANDジェネレータはデフォルトでは使用されていない。

マイクロコントローラ 暗号化アクセラレータサポート 編集

実装 STM32F2 STM32F4 Cavium NITROX Freescale CAU/mmCAU Microchip PIC32MZ Atmel ATECC508A TI TivaC Series CubeMX Nordic nRF51
wolfCrypt Yes Yes Yes Yes Yes Yes[15] Yes[16] Yes Yes

コードサイズとコードコメント比率 編集

実装 ソースコードサイズ

(kSLOC = 1000行のソースコード)

コメント行に対するコードの割合
Bouncy Castle 1359[17] 5.26[17]
cryptlib 241 2.66
Crypto++ 115[18] 5.74[18]
Libgcrypt 216[19] 6.27[19]
libsodium 44[20] 21.92[20]
OpenSSL 472[21] 4.41[21]
wolfCrypt 39 5.69

移植性 編集

実装 サポートOS スレッドセーフ
Bouncy Castle General Java API: J2ME, Java Runtime Environment 1.1+, Android. Java FIPS API: Java Runtime 1.5+, Android. C# API (General & FIPS): CLR 4.
CryptoComply Linux (RHEL, CentOS, Debian, Ubuntu, etc.), Windows, iOS, Android, FreeBSD, macOS, Solaris, Java Runtime Environment Yes
cryptlib AMX, ARINC 653, BeOS, ChorusOS, CMSIS-RTOS/mbed-rtos, DOS, DOS32, eCOS, embOS, FreeRTOS/OpenRTOS, uItron, MQX, MVS, Nucleus, OS/2, Palm OS, QNX Neutrino, RTEMS, SMX, Tandem NonStop, Telit, ThreadX, uC/OS II, Unix (AIX, FreeBSD, HP-UX, Linux, macOS, Solaris, etc.), VDK, VM/CMS, VxWorks, Win16, Win32, Win64, WinCE/Pocket PC/etc, XMK Yes
Crypto++ Unix (AIX, OpenBSD, Linux, MacOS, Solaris, etc.), Win32, Win64, Android, iOS, ARM Yes[注釈 1]
Libgcrypt All 32 and 64 bit Unix Systems (GNU/Linux, FreeBSD, NetBSD, macOS etc.), Win32, Win64, WinCE 他 Yes[22]
libsodium macOS, Linux, OpenBSD, NetBSD, FreeBSD, DragonflyBSD, Android, iOS, 32 and 64-bit Windows (Visual Studio, MinGW, C++ Builder), NativeClient, QNX, JavaScript, AIX, MINIX, Solaris Yes
OpenSSL Solaris, IRIX, HP-UX, MPE/iX, Tru64, Linux, Android, BSD (OpenBSD, NetBSD, FreeBSD, DragonflyBSD), NextSTEP, QNX, UnixWare, SCO, AIX, 32 and 64-bit Windows (Visual Studio, MinGW, UWIN, CygWin), UEFI, macOS (Darwin), iOS, HURD, VxWorks, uClinux, VMS, DJGPP (DOS), Haiku Yes
wolfCrypt Win32/64, Linux, macOS, Solaris, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, embedded Linux, WinCE, Haiku, OpenWRT, iPhone (iOS), Android, Nintendo Wii and Gamecube through DevKitPro, QNX, MontaVista, NonStop, TRON/ITRON/µITRON, Micrium's µC/OS, FreeRTOS, SafeRTOS, Freescale MQX, Nucleus, TinyOS, HP-UX, 非OS Yes
  1. ^ Crypto ++はオブジェクトレベルでスレッドセーフである。インスタンス間で共有データはない。2つの異なるスレッドが同じオブジェクトにアクセスする場合、ロックはユーザーが行う必要がある。

参考文献 編集

  1. ^ Validated FIPS 140 Cryptographic Modules, NIST.gov, retrieved 2015-12-22
  2. ^ GnuTLS help mailing list” (2023年2月9日). 2023年7月3日閲覧。
  3. ^ Downloading and installing NaCl, Bernstein, Lange, Schwabe, retrieved 2017-05-22
  4. ^ FIPS”. Mozilla Foundation (2012年2月1日). 2013年5月2日時点のオリジナルよりアーカイブ。2013年5月17日閲覧。
  5. ^ a b Release notes for recent versions of NSS” (2021年5月13日). 2021年7月18日閲覧。
  6. ^ OpenSSL: Newslog”. 2024年2月4日閲覧。
  7. ^ wolfSSL ChangeLog”. 2022年9月5日閲覧。
  8. ^ Bouncy Castle Specifications, bouncycastle.org, retrieved 2018-04-10
  9. ^ cryptlib Encryption Toolkit, Peter Gutmann, retrieved 2015-11-28
  10. ^ With Scute, scute.org
  11. ^ a b With GnuPG's SCdaemon & gpg-agent, gnupg.org
  12. ^ hwfeatures.c, git.gnupg.org
  13. ^ https://www.wolfssl.com/wolfSSL/Blog/Entries/2017/1/18_wolfSSL_Asynchronous_Intel_QuickAssist_Support.html
  14. ^ https://www.wolfssl.com/wolfSSL/Blog/Entries/2016/10/13_wolfSSL_ARMv8_Support.html
  15. ^ https://www.wolfssl.com/wolfSSL/wolfssl-atmel.html
  16. ^ http://processors.wiki.ti.com/index.php/Using_wolfSSL_with_TI-RTOS
  17. ^ a b Language Analysis of Bouncy Castle, OpenHub.net, retrieved 2015-12-23
  18. ^ a b Language Analysis of Crypto++, OpenHub.net, retrieved 2018-07-18
  19. ^ a b Language Analysis of Libgcrypt, OpenHub.net, retrieved 2015-12-23
  20. ^ a b Language Analysis of libsodium, OpenHub.net, retrieved 2017-05-07
  21. ^ a b Language Analysis of OpenSSL, OpenHub.net, retrieved 2017-05-07
  22. ^ GnuPG documentation: Libgcrypt overview - thread safety, GnuPG.org, retrieved 2016-04-16

外部リンク 編集