[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]

-[[戻る>.NET開発]]

* 目次 [#ba3e104c]
#contents

*概要 [#i831ac3c]
・アルゴリズム の編集

一通り揃っている。

-ハッシュ
--暗号ハッシュ([[様々な用途>https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0#.E7.94.A8.E9.80.94]]に利用可能)
--キー付きハッシュ([[署名・検証>https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%AD%A6%E7%9A%84%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0#.E7.94.A8.E9.80.94]]にも利用可能)

-暗号(暗号化・復号化、署名・検証に利用可能)
--秘密鍵暗号方式
--公開鍵暗号方式

-署名(署名・検証に利用可能)
--公開鍵暗号方式

-乱数生成、キー生成

*Managed、CSP、CNG実装とは? [#fde2f12c]
-Managedで終わる名称のProviderは、.NET実装と思われる(mscorlib.dll)。
-CryptoServiceProvider(CSP)で終わる名称のProviderは、「暗号化サービス プロバイダー (CSP) を使用する」とある(System.Core.dll)。
-Cngで終わる名称のProviderは、PlatformNativeのCryptography Next Generation (CNG) 実装を使用している(System.Core.dll)。

**参考 [#le45730f]

***CSP [#n13961a2]
-CryptoAPI Cryptographic Service Providers (Windows)~
https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb931357.aspx

-Cryptographic API - Wikipedia~
https://ja.wikipedia.org/wiki/Cryptographic_API

***CNG [#if785c4b]

-CNGとは (Cryptography Next Generation) シーエヌジー: - IT用語辞典バイナリ~
http://www.sophia-it.com/content/Cryptography+Next+Generationax

-Cryptography Next Generation~
https://technet.microsoft.com/en-us/library/532ac164-da33-4369-bef0-8f019d5a18b8

**どれを使用すべき? [#ub3ba427]

***.NET Framework の暗号モデル [#ya3a33ad]
-.NET Framework の暗号モデル~~
https://msdn.microsoft.com/ja-jp/library/0ss79b2x.aspx

には、以下のようにある。

-最適な実装を選択できる。
***最適な実装を選択可能 [#f3be9d35]

--マネージ実装~
-マネージ実装~
.NET Framework をサポートするすべてのプラットフォームで利用可能。~
ただし、マネージ実装はFIPSに認定されておらず、ラッパー クラスよりも低速である場合がある。
--CAPI 実装~

-CAPI 実装~
CSPラッパー。以前のOSで使用可能だが、開発中止となっている。
--CNG 実装~

-CNG 実装~
CNGラッパー。まさに最新の実装であり、新しい開発が行われる。

-アルゴリズムの選択
--データのプライバシー 
---Aes
--データの整合性 
---HMACSHA256
---HMACSHA512
--デジタル署名 
---ECDsa
---RSA
--キー交換
---ECDiffieHellman
---RSA
***アルゴリズムの選択 [#uf945e7e]
-データのプライバシー~
Aes

--乱数生成
---RNGCryptoServiceProvider
-データの整合性 
--HMACSHA256
--HMACSHA512

--パスワードからのキー生成
---Rfc2898DeriveBytes
-デジタル署名 
--ECDsa
--RSA(RS256)

-キー交換
--ECDiffieHellman
--RSA(RS256)

-乱数生成~
RNGCryptoServiceProvider

-パスワードからのキー生成~
Rfc2898DeriveBytes

***CngKey [#v4011842]
-How to use RSA in .NET: RSACryptoServiceProvider vs. RSACng and good practise patterns - Dusted Codes~
https://dusted.codes/how-to-use-rsa-in-dotnet-rsacryptoserviceprovider-vs-rsacng-and-good-practise-patterns

以下の様な違いがあるが、

>RSACngのキーはCngKeyクラスによって管理され、RSACngのコンストラクタに注入できますが、~
RSACryptoServiceProviderは独自のキー操作に結びついています。

どちらでも良さそう。
[[どちらでも良さそう。>#f3be9d35]]

***性能 [#h1bd7d6f]
-Measuring the performance of AES implementations in .Net Framework (AesManaged vs AesCryptoServiceProvider) - CodeProject~
https://www.codeproject.com/Tips/844795/Measuring-the-performance-of-AES-implementations-i

*.NETの暗号化Providerの列挙 [#da2f4388]
**ハッシュ [#de661712]

***暗号ハッシュ(HashAlgorithm) [#l1894cde]
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hashalgorithm.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.md5.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.md5cng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.md5cryptoserviceprovider.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.ripemd160.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.ripemd160managed.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha1.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha1cng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha1cryptoserviceprovider.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha256.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha256cng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha256cryptoserviceprovider.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha256managed.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha384.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha384cng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha384cryptoserviceprovider.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha384managed.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha512.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha512cng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha512cryptoserviceprovider.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.sha512managed.aspx

***キー付きハッシュ(KeyedHashAlgorithm) [#x4fe1902]
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.keyedhashalgorithm.aspx

-System.Security.Cryptography.HMAC~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmac.aspx

--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmacmd5.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmacripemd160.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmacsha1.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmacsha256.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmacsha384.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmacsha512.aspx

-System.Security.Cryptography.MACTripleDES~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.mactripledes.aspx

**暗号化 [#pdc25f19]
***秘密鍵暗号方式(SymmetricAlgorithm) [#r45cd534]
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.symmetricalgorithm.aspx

-System.Security.Cryptography.Aes~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.aes.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.aescng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.aescryptoserviceprovider.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.aesmanaged.aspx

-System.Security.Cryptography.DES~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.des.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.descryptoserviceprovider.aspx

-System.Security.Cryptography.RC2~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rc2.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rc2cryptoserviceprovider.aspx

-System.Security.Cryptography.Rijndael~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rijndael.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rijndaelmanaged.aspx

-System.Security.Cryptography.TripleDES~
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.tripledes.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.tripledescng.aspx
--https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.tripledescryptoserviceprovider.aspx

***公開鍵暗号方式(AsymmetricAlgorithm) [#q04bc939]
AsymmetricAlgorithmの内、暗号化・復号化が可能な公開鍵暗号方式は、RS256(RSA)のみ。

https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rsacng.aspx
-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rsacryptoserviceprovider.aspx

**署名・検証(AsymmetricAlgorithm) [#lf5eb161]
署名・検証は、AsymmetricAlgorithmの内の、以下のProviderを使用する。

https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.asymmetricalgorithm.aspx

-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.dsacng.aspx
-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.dsacryptoserviceprovider.aspx
-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.ecdsacng.aspx
-https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.ecdiffiehellmancng.aspx

**乱数生成、キー生成 [#feec3024]

***乱数生成 [#z6a6e8e6]
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rngcryptoserviceprovider(v=vs.110).aspx

RNGCryptoServiceProviderを使用する。~
Membership.GeneratePasswordも恐らく下位でRNGCryptoServiceProviderを使用している。

***キー生成 [#ta70b091]
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.rfc2898derivebytes.aspx

Rfc2898DeriveBytesを使用する。

主に、
-キー付きハッシュ(KeyedHashAlgorithm)
-秘密鍵暗号方式(SymmetricAlgorithm)

のキーを生成する(パスワードをそのまま使用しない)。


*参考 [#mf5f8a70]

**DOBON.NET: VB.NET, C#, 無料ソフトウェア... [#j2316c2c]
http://dobon.net/index.html

-文字列、暗号化: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/index.html

***暗号ハッシュ [#bbfd012a]
-MD5やSHA1などでハッシュ値を計算する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/md5.html
-ファイルのMD5やSHA1などでハッシュ値を計算する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/filemd5.html

***秘密鍵暗号方式 [#geb60fa1]
-パスワードで文字列を暗号化する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/encryptstring.html
-パスワードでファイルを暗号化する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/encryptfile.html

***公開鍵暗号方式 [#icf617f4]
-公開鍵暗号方法で暗号化する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/rsaencryption.html

***署名・検証 [#f3bcf75f]
-デジタル署名を作成、検証する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/digitalsignature.html

***乱数生成、キー生成 [#gb1f54a6]
-乱数を生成する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/programing/random.html
-パスワードのようなランダムな文字列を生成する: .NET Tips: C#, VB.NET~
http://dobon.net/vb/dotnet/string/generatepassword.html

**Open棟梁の暗号ラッパー [#he1630c1]
-Managed優先、無ければCSPを使用というポリシーで実装。
-CNG実装への移行は、まだ行っていない。

***暗号ハッシュ [#la4e1baf]
Managed優先、無ければCSPを使用というポリシーで実装。

https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Util/GetHash.cs#L162

-Managed優先、無ければCSPを使用というポリシーで実装。
-Membership.GeneratePasswordを使っている。~
RNGCryptoServiceProviderに変更したい。
--ASP.NETを使ってランダムなパスワードを生成する:CodeZine(コードジン)~
https://codezine.jp/article/detail/238

***キー付きハッシュ [#o0ef5dab]
HMACの実装が不足している(hmacmd5、hmacripemd160、hmacsha256、hmacsha384、hmacsha512)。

https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Util/GetKeyedHash.cs#L182

-Managedのsuffixが無いが、MSDNではmscorlib.dllとなっているためManaged実装と思われる。

-キーは、Rfc2898DeriveBytesを使用して生成している。

-HMACの実装が不足している。
--HMACSHA1のみ実装
--HMACMD5、HMACRIPEMD160、HMACSHA256、HMACSHA384、HMACSHA512が未実装。

***秘密鍵暗号方式 [#m1c66e75]
Managed優先、無ければCSPを使用というポリシーで実装。~
(AesCryptoServiceProviderが例外的に余分に実装されている)

https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/IO/SymmetricCryptography.cs#L430

-AesCryptoServiceProviderが例外的に余分に実装されている。

-キーは、Rfc2898DeriveBytesを使用して生成している。

***公開鍵暗号方式 [#r9036717]
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/IO/ASymmetricCryptography.cs

-暗号化・複合化で使用できるのは、RSACryptoServiceProviderのみ。

***署名・検証 [#s1ca647e]
なし。

***乱数生成、キー生成 [#q715ba2e]
なし。

-乱数発生にはRNGCryptoServiceProviderを使ってもイイかもしれない。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS