CFBモードはブロック暗号をストリーム暗号のように利用するモードである.
各ブロックの平文miと前のブロックの暗号文ci-1を暗号化したものとの
EX-orを暗号文ciとする.
ただし,最初のブロックの暗号化には初期化ベクトルIVを利用する.
送信者は任意の初期化ベクトルIVをランダムに選んで,c0=IVとする.
CFBモードでは,送信者は暗号文とともに,初期化ベクトルIVを受信者に送信する.
IVが暗号文に含まれていると言い換えてもよい.
すなわち,CFBモードで送信者が受信者に送る暗号文Cは
C = (IV,c1,c2,...,ci,...,cn) である.
さて, CFBモードではブロック暗号方式のブロック長に満たないサイズの平文ブロックを
暗号化するような用途に用いることが可能である.
例えば,ブロック長8bitsでの暗号化や,
ブロック長32bitsでの暗号化など用途にあわせて利用可能である.
ECBモードやCBCモードで
パディングを行うことで暗号化は可能ではあるが, 暗号化効率の面で問題がある(冗長性が高
く,無駄であるということ.).
以下ではブロック暗号方式のブロック長をn bits, 平文のサイズをk bitsとした場合の
暗号化,復号についての解説を行う.
まず, 最初のブロックの暗号化には初期化ベクトルIVを利用する.
送信者は任意の初期化ベクトルIVをランダムに選んで,r0=IVとする.
また, MSB(r,x)をrの上位x bits取り出したもの,LSB(r,y) を rの下位yビットを持ち出したものとする.
rがn bitsの場合, r=MSB(r,x) || LSB(r,n-x)であることに注意されたい.