暗号ライブラリの比較

暗号ライブラリの比較（あんごうライブラリのひかく）では、暗号化アルゴリズムを扱い、サポートする各機能を呼び出す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 License      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

Category:ライブラリ (プログラミング)
Category:暗号ソフトウェア
Category:ソフトウェア
Category:ソフトウェアの比較
Category:比較