「[[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サポートを追加)。 ※ CSP = Crypto Service Provider~ ※ Cng = Crypto Next Genaration **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上ではどうなる?→ OpenSSLプロバイダが追加されつつある)。 *暗号ハッシュ [#la4e1baf] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetHash.cs 通常のハッシュを取得 **対応プロバイダ(アルゴリズム) [#u59462a2] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumHashAlgorithm.cs ***CSP (CryptoServiceProvider) [#pf93ff90] -MD5_CSP -SHA1_CSP -SHA256_CSP -SHA384_CSP -SHA512_CSP ***CNG (CryptographyNextGeneration) [#f65054b6] -MD5_CNG -SHA1_CNG -SHA256_CNG -SHA384_CNG -SHA512_CNG ***Managed [#e04f8c92] -RIPEMD160_M -SHA1_M -SHA256_M -SHA384_M -SHA512_M **メソッド [#u774fb4b] ***ハッシュ取得(バイト) [#k0169748] GetHashBytesメソッド ***ハッシュ取得(文字列) [#p8159d22] GetHashStringメソッド *キー付きハッシュ [#o0ef5dab] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/GetKeyedHash.cs キーを使用してハッシュを取得 **対応プロバイダ(アルゴリズム) [#sa4cd7ae] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumKeyedHashAlgorithm.cs ***CSP [#qe49d1a6] -HMACMD5 -HMACSHA1 -HMACSHA256 -HMACSHA384 -HMACSHA512 ***Managed [#efc3240c] -HMACRIPEMD160, -MACTripleDES, **メソッド [#a533e308] ***ハッシュ取得(バイト) [#a4af2098] GetHashBytesメソッド ***ハッシュ取得(文字列) [#u9fc47df] GetHashStringメソッド *秘密鍵暗号方式 [#m1c66e75] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/SymmetricCryptography.cs 対称アルゴリズムによる暗号化・復号化 **アルゴリズム [#r89df60e] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumSymmetricAlgorithm.cs ***対応プロバイダ [#x0f4b62d] -CSP (CryptoServiceProvider) --AES_CSP --DES_CSP --RC2_CSP --TDES_CSP -CNG (CryptographyNextGeneration) --AES_CNG --TDES_CNG -Managed --AES_M --Rijndael_M ***CipherMode, PaddingMode指定 [#j92ca0bd] -CipherMode --CBC --CFB --CTS --ECB --OFB -PaddingMode --None --Zeros --ANSIX923 --ISO10126 --PKCS7 **メソッド [#r00874df] ***暗号化 [#a41c1ded] -EncryptStringメソッド -EncryptBytesメソッド ***復号化 [#i45d996c] -DecryptStringメソッド -DecryptBytesメソッド *公開鍵暗号方式 [#r9036717] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/ASymmetricCryptography.cs 非対称アルゴリズムによる暗号化・復号化 **アルゴリズム [#i583744e] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumASymmetricAlgorithm.cs ***対応プロバイダ [#x8c48a97] -CSP --RsaCsp, -CNG --RsaCng, -OpenSsl --RsaOpenSsl -自動選択 --X509 ***PaddingMode指定 [#j51f3424] padding指定可能 -NET45以前 bool fOAEP = true or false; -NET45以前 RSAEncryptionPadding padding = ...; **メソッド [#b9d36712] ***秘密鍵と公開鍵を取得 [#q909f850] ***暗号化 [#v609ffab] -EncryptStringメソッド -EncryptBytesメソッド ***復号化 [#e2769d54] -DecryptStringメソッド -DecryptBytesメソッド *ハイブリッド・暗号化(キー交換) [#s81d8323] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/KeyExg/BaseKeyExchange.cs **アルゴリズム [#c766c571] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/KeyExg/EnumKeyExchange.cs -RSAPKCS1KeyExchange -RSAOAEPKeyExchange -ECDiffieHellmanCryptographyNextGeneration, ***Rsa [#a0ff386a] -基底~ RsaKeyExchange --RsaAlice : RsaKeyExchange --RsaBob : RsaKeyExchange -RsaOaep --RsaOaepAlice : RsaAlice --RsaOaepBob : RsaBob -RsaPkcs1 --RsaPkcs1Alice : RsaAlice --RsaPkcs1Bob : RsaBob ***Ecdh [#v73e2a11] -基底~ EcdhKeyExchange : BaseKeyExchange -EcdhCng --EcdhCngAlice : EcdhKeyExchange --EcdhCngBob : EcdhKeyExchange --AesCryptoServiceProvider **メソッド [#l87c5968] ***暗号化 [#s8a67339] -Encryptメソッド ***復号化 [#i45d996c] -Decryptメソッド *署名・検証 [#s1ca647e] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/DigitalSign.cs **RSA/DSA [#l59a8ae6] ***クラス [#a9c80715] -DigitalSignX509.cs -DigitalSignXML.cs -DigitalSignParam.cs ***アルゴリズム [#dd745415] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumDigitalSignAlgorithm.cs -On Windows --RsaCSP_MD5 --RsaCSP_SHA1 --RsaCSP_SHA256 --RsaCSP_SHA384 --RsaCSP_SHA512 --DsaCSP_SHA1(SHA256以降はエラーになるため、現状サポートなし。) -On Linux --RsaOpenSsl_MD5 --RsaOpenSsl_SHA1 --RsaOpenSsl_SHA256 --RsaOpenSsl_SHA384 --RsaOpenSsl_SHA512 --DsaOpenSsl_SHA1 **ECDsa [#f307cd5a] ***クラス [#o081d775] -DigitalSignECDsaCng.cs -DigitalSignECDsaOpenSsl.cs -DigitalSignECDsaX509.cs ***アルゴリズム [#qfb9718e] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/EnumDigitalSignAlgorithm.cs -On Windows --ECDsaCng_P256 --ECDsaCng_P384 --ECDsaCng_P521 -On Linux --ECDsaOpenSsl_P256 --ECDsaOpenSsl_P384 --ECDsaOpenSsl_P521 **メソッド [#nb4bfdec] ***署名 [#q2209377] Signメソッド ***検証 [#ded746e2] Verifyメソッド *パスワード関連 [#h545187d] **乱数生成 [#q715ba2e] -パスワード生成クラス~ https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/Pwd/GetPassword.cs ***対応プロバイダ [#bb7f5eb5] RNGCryptoServiceProvider ***メソッド [#f498508d] -RandomByte -RandomByte -Base64Secret -Base64UrlSecret -Generate **キー生成 [#lf7d7f7e] ***対応プロバイダ [#m33069ab] Rfc2898DeriveBytesを使用したキー生成 ***メソッド [#v8bbd7bf] なし。内部利用のみ。 -[[パスワード・ハッシュ化>#fe30a033]] >パスワード、ソルト、ストレッチ回数から、キーを生成する。 -[[秘密鍵暗号方式(SymmetricCryptography)>#m1c66e75]] >パスワードから共有キーと初期化ベクタを生成する。 **パスワード・ハッシュ化 [#fe30a033] https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Security/Pwd -GetPasswordHashV1.cs -GetPasswordHashV2.cs *その他 [#lad644dd] **[[JWTの生成と検証]] [#b2349dd5] **部品の検証ツール [#q103f322] ***暗号化プロバイダ・テスト・ツール [#ta7aa2d3] 以下のツールで、.NETの各種の暗号化プロバイダをテストできる。 -https://github.com/OpenTouryoProject/SampleProgram/tree/master/Other/Encryption/TestEncAndDecProvider ***暗号化・復号化ツール [#x1172e19] 以下のツールで、各種、暗号・復号化 部品を検証できる。 -https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Tests/EncAndDecUtil #ref(tool.png,left,nowrap,ツール) このツールの使用前に、「[[ココ>汎用認証サイトのファーストステップガイド (1)#te05840e]]」と同じ手順で、証明書をインストールする。 このツールの使用する証明書のパスは、 -C:\root\files\resource\X509 --RSA ---SHA256RSA.cer ---SHA256RSA.pfx --DSA ---SHA256DSA.cer ---SHA256DSA.pfx --ECDSA ---SHA256ECDSA.cer ---SHA256ECDSA.pfx ---SHA384ECDSA.cer ---SHA384ECDSA.pfx ---SHA512ECDSA.cer ---SHA512ECDSA.pfx --以下は汎用認証サイトで利用 ---SHA256RSA_Server.cer ---SHA256RSA_Server.pfx ---SHA256ECDSA_Server.cer ---SHA256ECDSA_Server.pfx ---SHA256RSA_Client.cer ---SHA256RSA_Client.pfx ---SHA256RSAClientCert.pfx *参考 [#ra83834a] **マイクロソフト系技術情報 Wiki [#ec900b2b] ***[[暗号化アルゴリズム>https://techinfoofmicrosofttech.osscons.jp/index.php?%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]] [#e6444104] ***[[.NETの署名・暗号化アルゴリズム>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] **.NET 開発基盤部会 Wiki [#o286d0de] ***[[高度午前 - 技術要素 - セキュリティ - 暗号・認証>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E9%AB%98%E5%BA%A6%E5%8D%88%E5%89%8D%20-%20%E6%8A%80%E8%A1%93%E8%A6%81%E7%B4%A0%20-%20%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%20-%20%E6%9A%97%E5%8F%B7%E3%83%BB%E8%AA%8D%E8%A8%BC]] [#y918929c] ***[[SC:対策技術 - 暗号>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?SC%EF%BC%9A%E5%AF%BE%E7%AD%96%E6%8A%80%E8%A1%93%20-%20%E6%9A%97%E5%8F%B7]] [#c06fc975]