「[[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.Csp~ https://www.nuget.org/packages/System.Security.Cryptography.Csp/ ---RSA ---RSACryptoServiceProvider ---, etc. --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]