「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>機能一覧 - 共通部品群]]

* 目次 [#adce8a06]
#contents

*概要 [#s9dee55e]
Open棟梁で提供される、暗号・復号化 部品。

*ポリシー [#wa7cbe87]
-Managed優先(.NET Standard対応を考慮)
-Managedが無ければCSPを使用というポリシーで実装。
-必要に応じて、下記の[[CNG対応>#n3ba7de2]]を行う(CNGサポートを追加)。

**CNG対応 [#n3ba7de2]
***方針 [#kc0b6ea9]
-CNGでしか提供されないアルゴリズムは、CNGで実装する。
-必要に応じて、CNGサポートを追加(後方互換維持のため、置き換えはしない)。

***調査結果 [#d97d6080]
-Managedが無く、CSPとCNGがサポートされるプロバイダは以下。
--MD5
--SHA1
--TripleDES 
--RSA
--DSA

-CNGでしか提供されないアルゴリズム。
--ECDsaCng
--ECDiffieHellmanCng

-なお、調査を進めてみたトコロ、~
.NET Standard 2.0でも以下のようなクラスの存在を確認。~
--System.Security.Cryptography
.NET Standard 2.0でも以下のようなクラスの存在を確認。

--System.Security.Cryptography.Csp~
https://www.nuget.org/packages/System.Security.Cryptography.Csp/
---RSA
---RSACryptoServiceProvider
---, etc.

>予想外に、CSPラッパーと同一名称のクラスの存在も確認できる。~
なので、.NET Standardの場合は、CNGより、むしろCSPになるもよう。
--System.Security.Cryptography.Cng~
https://www.nuget.org/packages/System.Security.Cryptography.Cng/
---RSACng
---ECDsaCng
---CngKey


>予想外に、CSPもCNGラッパーも確認できる(CNGはLinux上ではどうなる?)。

*乱数生成 [#q715ba2e]
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetPassword.cs

パスワード生成クラス

**対応プロバイダ [#bb7f5eb5]
***RNGCryptoServiceProvider [#gc53f04f]

**メソッド [#f498508d]
***Generate [#s662c520]
***RandomByte [#xf3bffb9]
-RandomByte
-Base64Secret
-Base64UrlSecret

*キー生成 [#lf7d7f7e]

**対応プロバイダ [#c992c872]
***Rfc2898DeriveBytes [#y8f522ee]

**メソッド [#v8bbd7bf]
なし。内部利用のみ。

-[[キー付きハッシュ(GetKeyedHash)>#o0ef5dab]]
>パスワード、ソルト、ストレッチ回数から、キーを生成する。

-[[秘密鍵暗号方式(SymmetricCryptography)>#m1c66e75]]
>パスワードから共有キーと初期化ベクタを生成する。

*暗号ハッシュ [#la4e1baf]
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs

通常のハッシュを取得

**対応プロバイダ(アルゴリズム) [#u59462a2]
***MD5CryptoServiceProvider, [#hb1a51d0]
***SHA1CryptoServiceProvider [#t0da7c1c]
***SHA1Managed [#b006f956]
***SHA256Managed [#l2aae73b]
***SHA384Managed [#w5745dd5]
***SHA512Managed [#v24c0a37]

**メソッド [#u774fb4b]
***ハッシュ取得(バイト) [#k0169748]
***ハッシュ取得(文字列) [#p8159d22]
***Salted and Hashed パスワード生成 [#hb061729]
***Salted and Hashed パスワード検証 [#n8087fec]

*キー付きハッシュ [#o0ef5dab]
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetKeyedHash.cs

キーを使用してハッシュを取得

**対応プロバイダ(アルゴリズム) [#sa4cd7ae]
***HMACSHA1 [#b94181a2]
***HMACMD5 [#o8583365]
***HMACRIPEMD160 [#kfcdc29b]
***HMACSHA256 [#n4b6b286]
***HMACSHA384 [#c8ad8ad4]
***HMACSHA512 [#o0266b72]
***MACTripleDES [#b1ac690c]

**メソッド [#a533e308]
***ハッシュ取得(バイト) [#a4af2098]
***ハッシュ取得(文字列) [#u9fc47df]
***Salted and Hashed パスワード生成 [#j2ddaf9b]
***Salted and Hashed パスワード検証 [#ye556db7]

*秘密鍵暗号方式 [#m1c66e75]
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/SymmetricCryptography.cs

対称アルゴリズムによる暗号化・復号化

**対応プロバイダ [#r89df60e]
***AesManaged [#y14e0382]
***DESCryptoServiceProvider [#xcf1d8d9]
***RC2CryptoServiceProvider [#rf4dc9e0]
***RijndaelManaged [#o0884777]
***TripleDESCryptoServiceProvider [#lbe6cfca]

**メソッド [#r00874df]
***暗号化 [#a41c1ded]
***復号化 [#i45d996c]

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

非対称アルゴリズムによる暗号化・復号化

**対応プロバイダ [#i583744e]
***RSACryptoServiceProvider [#we3cb801]

***ECDiffieHellmanCng [#ifbd186f]
サポートを予定している。

**メソッド [#b9d36712]
***秘密鍵と公開鍵を取得 [#q909f850]
***暗号化 [#v609ffab]
***復号化 [#e2769d54]

*署名・検証 [#s1ca647e]
-https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/DigitalSign.cs
--https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/DigitalSignX509.cs
--https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/DigitalSignXML.cs
--https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/DigitalSignParam.cs

**対応プロバイダ(アルゴリズム) [#pd1af70c]
***RSACryptoServiceProvider:MD5 [#oa154517]
***RSACryptoServiceProvider:SHA1 [#e5887e1e]
***RSACryptoServiceProvider:SHA256 [#ka038695]
***RSACryptoServiceProvider:SHA384 [#q6c9776f]
***RSACryptoServiceProvider:SHA512 [#f2c0de43]
***DSACryptoServiceProvider:SHA1 [#k5dce091]
DSACryptoServiceProvider:MD、SHA256はエラーになるため、現状サポートなし。

***ECDsaCng [#m3686e9c]
サポートを予定している。

**メソッド [#nb4bfdec]
***署名 [#q2209377]
***検証 [#ded746e2]

*その他 [#lad644dd]
**[[JWTの生成と検証]] [#b2349dd5]

**部品の検証ツール [#q103f322]
-https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Tools/Encryption

***暗号化プロバイダ・テスト・ツール [#ta7aa2d3]
以下のツールで、.NETの各種の暗号化プロバイダをテストできる。

-https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Tools/Encryption/TestEncAndDecProvider

***暗号化・復号化ツール [#x1172e19]

以下のツールで、各種、暗号・復号化 部品を検証できる。

-https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Tools/Encryption/EncAndDecUtil

#ref(tool.png,left,nowrap,ツール)

このツールの使用前に、「[[ココ>汎用認証サイトのファーストステップガイド (1)#te05840e]]」と同じ手順で、証明書をインストールする。

このツールの使用する証明書のパスは、

-\root\programs\C#\Frameworks\Tools\Encryption\EncAndDecUtil\
--EncAndDecUtil_RS256.pfx
--EncAndDecUtil_RS256.cer

となっている。

*参考 [#ra83834a]
**[[.NETの署名・暗号化アルゴリズム - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?.NET%E3%81%AE%E7%BD%B2%E5%90%8D%E3%83%BB%E6%9A%97%E5%8F%B7%E5%8C%96%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0]] [#ldc64cc4]


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