暗号化について知ろう

基礎知識
暗号とは
暗号化とは
復号とは
復号も「行為」っぽい?
暗号鍵とは
暗号化方式とは
共通鍵暗号方式とは
データをぐちゃぐちゃにするとき(暗号化)と、ぐちゃぐちゃになったデータを元に戻すとき(復号)に同じ鍵を使う暗号化のやり方
ブロック暗号とストリーム暗号は共通鍵暗号方式のひとつ。
「秘密鍵暗号方式」とも呼ばれるらしい。
代表的な規格: AES(Advanced Encryption Standard)
AESとは
(2021年時点の)今のアメリカで標準規格として採用されている暗号化のやり方
であり
共通鍵暗号方式な暗号化のやり方(のひとつ)
です。

2つの暗号(ブロック暗号とストリーム暗号)
ブロック暗号
なるほど、なんとなくイメージついた
まず、暗号化するデータを一定の長さ毎にブチブチ区切って、その区切った固まり単位でぐちゃぐちゃにする暗号化のやり方(で暗号化した暗号)
ストリーム暗号
今回はあまり関係無さそう
暗号化するデータを1文字(bit)ずつぐちゃぐちゃにするやり方
ブロック暗号の「モード」
ブロック暗号 :暗号化するデータを一定の長さ毎にブチブチ区切って、その区切った固まり単位でぐちゃぐちゃにする暗号化のやり方(で暗号化した暗号)
区切った単位でぐちゃぐちゃするときのパターン的なものっぽい。
ブロック暗号アルゴリズムを使用し、長い平文を暗号化する際はブロック暗号アルゴリズムを繰り返し使って、暗号化する必要があります。この繰り返しの方法のことを、ブロック暗号のモードと呼びます。
種類も色々ある。
今回知りたいのはCBCモード。
ブロック暗号の主なモード
ECBモード:Electronic CodeBook mode (電子符号表モード)
CBCモード:Cipher Block Chaining mode (暗号ブロック連鎖モード)
CFBモード:Cipher-FeedBack mode (暗号フィードバックモード)
OFBモード:Output-FeedBack mode (出力フィードバックモード)
CTRモード:CounTeR mode (カウンタモード)

CBC(Cipher Block Chaining)モードとは
ようわからんけど、前のブロックを使って暗号化するやつらしい。
前のが足りん場合はパディングとかいう仮データを入れるんか。
CBCモードでは、1つ前の暗号文ブロックと平文ブロックのXOR(排他的論理和)をとり、そのXORの値を暗号化を行います。CBCモードも最後の平文ブロックがブロック長に満たない場合にはパディングと呼ばれるデータを埋めてあげます。
ここ重要そう。
暗号文ブロック自体に、一つ前の暗号文ブロックが必要やから Cipher Block Chaining なんやな。
”1つ前の暗号文ブロック” + ”平文ブロック”のXORで得た値を暗号化したもの=暗号文ブロック、となります。
<追記>
-特徴-
最初の平文ブロックを暗号化するときには「1つ前の暗号文ブロック」は存在しないので、「1つ前の暗号文ブロック」の代わりのビット列を1ブロック分用意する必要があります。
このビット列のことを「初期化ベクトル(initialization vector)」、または、頭文字をとって「IV」と呼びます。
※初期化ベクトルは、暗号化のたびに異なるランダムなビット列を使用してください
ここも重要、IVを用意して、暗号化のたびに異なるランダムなビット列(今回は128ビット)を生成する必要がある。

Flutter(Dart)で AES128 の CBC モードで暗号化
このパッケージでいけそう。
Supported modes are:
CBC AESMode.cbc(コレっぽい)
CFB-64 AESMode.cfb64
CTR AESMode.ctr
ECB AESMode.ecb
OFB-64/GCTR AESMode.ofb64Gctr
OFB-64 AESMode.ofb64
SIC AESMode.sic

概要は把握できた。close