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

暗号ライブラリ 実装 開発元 開発言語 オープンソース ソフトウェアライセンス FIPS 140 検証Validated FIPS 140 Cryptographic Modules, NIST.gov, retrieved 2015-12-22 FIPS 140-2 モード 最新アップデートBouncy Castle Legion of the Bouncy Castle Inc. Java, C# MITライセンス CryptoComply SafeLogic Java, C 商用版 Continuouscryptlib Peter Gutmann C Sleepycat License または 商用版 Crypto++ The Crypto++ project C++ Boost Software License (すべての各ファイルは public domain) April 8, 2018 (7.0.0)Moved to FIPS 140 Historical Validation ListGnuTLS Nikos Mavrogiannopoulos, Simon Josefsson C GNU LGPL v2.1+ Libgcrypt GnuPG community and g10code C GNU LGPL v2.1+ libsodium Frank Denis C ISC license December 13, 2017 (1.0.16)NaCl Daniel J. Bernstein, Tanja Lange, Peter Schwabe C Public domain February 21, 2011Downloading and installing NaCl, Bernstein, Lange, Schwabe, retrieved 2017-05-22Network Security Services Mozilla C MPL 2.0 OpenSSL The OpenSSL Project C Apache Licence 1.0 と 4-Clause BSD Licence wolfCrypt wolfSSL, Inc. C GPL v2 または 商用版

鍵処理

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

鍵生成と鍵交換 実装ECDHDHDSARSAElGamalNTRUDSSBouncy Castle CryptoComply cryptlibCrypto++ Libgcrypt libsodiumOpenSSL wolfCrypt

楕円曲線暗号サポート 実装NISTSECGECC BrainpoolECDSAECDHCurve25519EdDSAGOST R 34.10Bouncy Castle CryptoComply cryptlibCrypto++ Libgcrypt libsodiumOpenSSLwolfCrypt

公開鍵暗号標準 実装PKCS#1PKCS#5PKCS#8PKCS#12IEEE P1363ASN.1Bouncy CastleCryptoComplycryptlib Crypto++LibgcryptlibsodiumOpenSSLwolfCrypt

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

実装MD5SHA-1SHA-2SHA-3RIPEMD-160TigerWhirlpoolGOSTStribogBLAKE2Bouncy CastleCryptoComplycryptlibCrypto++LibgcryptlibsodiumOpenSSLwolfCrypt

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

実装HMAC-MD5HMAC-SHA1HMAC-SHA2Poly1305-AESBLAKE2-MACBouncy CastleCryptoComplycryptlib Crypto++ Libgcrypt libsodiumOpenSSL wolfCrypt

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

ブロック暗号 アルゴリズム ImplementationAESCamellia3DESBlowfishTwofishCAST5IDEAGOST 28147-89ARIABouncy CastleBouncy Castle Specifications, bouncycastle.org, retrieved 2018-04-10CryptoComplycryptlibcryptlib Encryption Toolkit, Peter Gutmann, retrieved 2015-11-28 Crypto++ Libgcrypt libsodiumOpenSSLwolfCrypt

暗号モード 実装ECBCBCOFBCFBCTRCCMGCMOCBXTSAES-WrapStreamBouncy Castle CryptoComplycryptlibCrypto++ Libgcrypt libsodiumOpenSSLwolfCrypt

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

実装RC4HC-256RabbitSalsa20ChaChaSEALPanamaWAKEGrainVMPCISAACBouncy CastleCryptoComplycryptlibCrypto++LibgcryptlibsodiumOpenSSLwolfCrypt

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

Smartcard, SIM と HSM プロトコルサポート 実装 PKCS #11 PC/SC CCID Bouncy Castle CryptoComply cryptlib Crypto++ Libgcrypt With Scute, scute.org With GnuPG's SCdaemon & gpg-agent, gnupg.org libsodium OpenSSL wolfCrypt

汎用 CPU / プラットフォームアクセラレーションサポート 実装 AES-NI SSSE3 / SSE4.1 AVX / AVX2 RdRand VIA PadLock Intel QuickAssist AltiVec ARMv7-A NEON ARMv8-A CryptoComply cryptlib Crypto++ Libgcrypthwfeatures.c, git.gnupg.org libsodium OpenSSL wolfCrypt https://www.wolfssl.com/wolfSSL/Blog/Entries/2017/1/18_wolfSSL_Asynchronous_Intel_QuickAssist_Support.html https://www.wolfssl.com/wolfSSL/Blog/Entries/2016/10/13_wolfSSL_ARMv8_Support.html

マイクロコントローラ 暗号化アクセラレータサポート 実装 STM32F2 STM32F4 Cavium NITROX Freescale CAU/mmCAU Microchip PIC32MZ Atmel ATECC508A TI TivaC Series CubeMX Nordic nRF51wolfCrypthttps://www.wolfssl.com/wolfSSL/wolfssl-atmel.htmlhttp://processors.wiki.ti.com/index.php/Using_wolfSSL_with_TI-RTOS

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

実装 ソースコードサイズ (kSLOC = 1000行のソースコード) コメント行に対するコードの割合Bouncy Castle1359Language Analysis of Bouncy Castle, OpenHub.net, retrieved 2015-12-235.26cryptlib2412.66 Crypto++115Language Analysis of Crypto++, OpenHub.net, retrieved 2018-07-185.74Libgcrypt216Language Analysis of Libgcrypt, OpenHub.net, retrieved 2015-12-236.27libsodium44Language Analysis of libsodium, OpenHub.net, retrieved 2017-05-0721.92OpenSSL472Language Analysis of OpenSSL, OpenHub.net, retrieved 2017-05-074.41wolfCrypt395.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 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 Crypto++ Unix (AIX, OpenBSD, Linux, MacOS, Solaris, etc.), Win32, Win64, Android, iOS, ARM Libgcrypt All 32 and 64 bit Unix Systems (GNU/Linux, FreeBSD, NetBSD, macOS etc.), Win32, Win64, WinCE 他 GnuPG documentation: Libgcrypt overview - thread safety, GnuPG.org, retrieved 2016-04-16 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 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 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

参考文献

外部リンク Crypto++ project, https://cryptopp.com/ OpenSSL libraries libssl and libcrypto, https://wiki.openssl.org/index.php/Libcrypto_API SafeLogic's CryptoComply family of cryptographic libraries, https://www.SafeLogic.com wolfSSL embedded crypto libraries, https://wolfssl.com/wolfSSL/Products-wolfcrypt.html