あるAPIと暗号化した通信を行う際に、API側から指定された暗号化方式について「???」となったので、暗号化に関する用語と概念の自分用まとめ。
暗号化の種類
暗号化には共通鍵暗号、秘密鍵暗号の2種類がある。
暗号方式 | 主なアルゴリズム | 特徴 |
---|---|---|
共通鍵暗号 | AES、RC4、DES、3DES | 暗号化と復号化に同じ鍵を利用 |
秘密鍵暗号 | RSA、ElGamal | 暗号化と復号化で異なる鍵を利用 |
このうちAES,RSAがよく使われる。
またハイブリット方式というものもよく使われる(SSLとか)。
共通鍵暗号では、処理時間が高速なのですが、第三者に鍵の情報が分かってしまうとデータが復号されてしまうという問題があります。また、公開鍵暗号では、安全に鍵の情報を保持できるのですが、処理時間が非常に遅いという問題があります。そこで、これら2つの方式の利点を兼ね備えたハイブリッド方式という手法があります。ハイブリッド方式では、共通鍵を安全に渡すために、鍵交換の際には公開鍵暗号を使用して、実際のデータの暗号化には共通鍵を使用します。これにより鍵は安全に配布でき、高速処理できます。
http://www.infraexpert.com/study/security4.html
ブロック単位での暗号化
AESにせよRSAにせよ、通常、暗号化は鍵のサイズと同じバイト長を1ブロックとして暗号化する。1024ビットの鍵ならば128バイトを1ブロックとして暗号化する。
※「ブロック暗号」といった場合は共通鍵暗号の話っぽい
ブロック暗号(ブロックあんごう、英語: Block cipher)とは、共通鍵暗号の一種で、固定長のデータ(ブロックと呼ぶ)を単位として処理する暗号の総称である。 cf. https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E6%9A%97%E5%8F%B7
パディングモード(パディング方式)
分割する時にブロックで綺麗に割り切れない場合は、パディングで穴埋めする。
パディングモード | 特徴 |
---|---|
PKCS#5 とか PKCS#7 | AESと組み合わせることが多い |
Optimal Asymmetric Encryption Padding(OAEP) | RSAと組み合わせることが多く、その場合はRSA-OAEPと呼ばれる。 |
cf. http://pentan.info/doc/block_cipher.html#anc_padding
ブロック暗号 暗号化モード(暗号利用モード)
ブロック暗号の方式なので、共通鍵暗号(AESなど)の時に出てくる用語
暗号化モード | 特徴 |
---|---|
ECB | ブロックに分割しそのまま暗号化。そのため鍵と暗号対象データが同じであれば、同じ暗号データになる。 |
CBC | 最初のブロックについては初期ベクトル(IV)と暗号対象データをXOR計算した結果を暗号化する。次のブロックについては、前のブロックとそのブロックをXOR計算した結果を暗号化する。そのため、元のデータと鍵が同じでも一意の暗号データになりにくい。 |
cf. http://qiita.com/hibara/items/c9096376b1d7b5c8e2ae
その他の種類については https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89
暗号化の用語が分からなければ
下記がめちゃめちゃ良くまとまっててわかりやすい