暗号化学び直し - mao-test-h/SeekableAesAssetBundle GitHub Wiki
暗号化に関する知見が虚無だったので学び直した。
その際に得た知見諸々をメモ。(学習の初期段階なので間違っている可能性もあり)
その際の参考サイトは以下。
初歩的かもしれないが、色々見ていて「ASE、RSA、CBC、ECBと沢山あるけど違いは何?」となったので以下に纏める。
- AES
- 共通鍵暗号方式の実装
- 「共通鍵暗号」とは?
- 特徴 : 暗号化に使う鍵と復号に使う鍵が同じ。処理が早い。
- 「共通鍵暗号」とは?
- 共通鍵暗号方式の実装
- RSA
- 公開鍵暗号方式の実装
- 「公開鍵暗号」とは?
- 特徴 : 暗号化に使う鍵と復号に使う鍵が違う。処理が遅い。
- SSHで使われているやつ。
- 「公開鍵暗号」とは?
- 公開鍵暗号方式の実装
今回触れるのは共通鍵暗号の方。以下に種別を纏める。
- ブロック暗号
- 特徴 : 平文を128bitなどの固定長ブロックに分割して暗号化する暗号
CBC
やECB
と言ったアルゴリズムはそのブロックを暗号する際に使われるロジックの名称
- 特徴 : 平文を128bitなどの固定長ブロックに分割して暗号化する暗号
- ストリーム暗号
- 特徴 : 平文をビット単位あるいはバイト単位などで逐次暗号化する暗号
上述のようにブロック暗号はCipherModeを選択してアルゴリズムを選べる。
詳細については上記の参考サイトにあるので割愛するが、多分関連するであろう項目を挙げると以下。
- ECBモード
- 暗号化/復号すると必ず同じ暗号文になる。ザル
- ランダムアクセスの性質上、こちらを使うことになりそう感...。
- CBC
- 初期ベクトル(IV)や鍵の追加要素(Solt)を与えてブロックを暗号化。
- 次のブロックでは前の結果を使って暗号化していく(雑な説明)
- 簡単に言うと暗号化すると必ず違う暗号文になる。
- デフォルトでもこちらが指定されており、安全性としては良い感あるけど...アルゴリズムの性質上、多分ランダムアクセスは不可能。
- ※TechConで言われている「大半の暗号化用のStreamの実装はランダムアクセス不能なので注意」はこの性質を指してそう...。実際にCipherModeで指定できる大半のアルゴリズムは前のブロックの結果を見たりしているので...。
- 初期ベクトル(IV)や鍵の追加要素(Solt)を与えてブロックを暗号化。
- CTR
- よく分かってないけどランダムアクセス可能なうえでセキュリティ的にも良いらしい。
- が、CipherModeで指定できない。
- 上記にもリンクを貼っているが、自作の例はある。
後は名称が混在しているので単語の意味についても調べてみた。
↓とのことらしい。
- 【IT英語】encryption と cipher と cryptography の違い
- encryption : [名] 暗号化(暗号にすること)
- cryptography : [名] (学問としての)暗号法、暗号学
- cipher : [名] 暗号化アルゴリズム(サイファーと読む)
- ※とりあえずは
encryption
とcipher
の違いを抑えておけばいろいろ見やすくなりそう。
- ※とりあえずは
▼ 参考リンク
MSDN
CTRの実装について
Bouncy Castle
- Bouncy Castle を使用して、鍵、証明書、PKCS12を生成、読み書きする
- BouncyCastle.Crypto
- ※Bouncy Castleと言う暗号化ライブラリがあるらしい。ちなみにまだ見たこと無い。
シーク可能な暗号化ストリームについて
- AWSUnitySDK/AWSCore/Amazon.Runtime/Internal/Util/EncryptStream.cs
- これを含んでいるプロジェクトから引用。
- 一見した感じだとシーク可能な実装っぽい。
- とは言えAWSのライブラリに絡んでいるのでライセンスなどは要チェック。とりあえずは参考までに。
- How to add seek and position capabilities to CryptoStream
- シーク可能にしたCryptoStreamの実装例。今回の検証で用いた実装。
- CipherModeがECB。
- XTSSharp
- 上記のstackoverflowにリンクが貼られていた。近い実装らしい。
- ライセンスを確認して要チェック。
暗号化基礎
- VRMと暗号化
- 「そう言えば暗号化していたな」と思って見返した資料。AESベースでCipherModeの違いについて話されている。
- 試料中に出てくるライブラリはこちら
- 「そう言えば暗号化していたな」と思って見返した資料。AESベースでCipherModeの違いについて話されている。
- 【暗号化】ブロック暗号のモードまとめ (比較表付き)
- そもそも暗号化の知識がゴリラだったので学び直しに見たやつ。
- 「ブロック暗号とストリーム暗号」「ブロック暗号のモード」諸々について纏められている。
- c#の暗号化クラスを使ってみた(AES,RSA)
- 「ASE、RSA、CBC、ECBと沢山あるけど違いは何?」となって見返したやつ。詳細は上述している。
- 【IT英語】encryption と cipher と cryptography の違い
- encryption : [名] 暗号化(暗号にすること)
- cryptography : [名] (学問としての)暗号法、暗号学
- cipher : [名] 暗号化アルゴリズム(サイファーと読む)
- ※とりあえずは
encryption
とcipher
の違いを抑えておけばいろいろ見やすくなりそう。
- ※とりあえずは