TS viewer for Amazon Cloud Driveにおける暗号化のうち、AES 256bit CTRモードについての仕様です。
CBCモードの仕様はCarotDAVの暗号化について
を参照ください。PBKDF2の繰返し回数は0x400です。
暗号化に用いる鍵ストリームは、128bitのカウンタブロックをAES 256bitで暗号化する
ことにより生成します。
AES暗号化に用いる鍵は、ユーザから提供されたパスワードを、PBKDF2を用いて変形し
使用します。
繰返し回数は1000回, saltは"PseudoRandomStream"です。
128bitのカウンタブロックの、先行64bitをnonceに、次の64bitをカウンタとします。
nonceの64bit(8byte)は、nonceとして与えられた文字列を、PBKDF2を用いて変形し
使用します。
繰返し回数は1000回, saltは"nonce_salt"です。
カウンタの64bitは、1ずつインクリメントされ、リトルエンディアンで格納されます。
128bit(16byte)のカウンタブロックの、先頭から9byte目がカウンタの最下位バイトとなり、
16byte目がカウンタの最上位バイトとなります。
カウンタは、ストリームの16byte毎に0からインクリメントされます。
つまり、ストリームのPositionを16で割った商となります。
生成した鍵ストリームと、オリジナルのストリームをxorすることにより、暗号化します。
復号は、暗号化ストリームを鍵ストリームでxorすることにより行います。
nonce文字列は、ファイル名から生成します。
重複を避けるため、filenameをオリジナルファイル名としたとき、
"filename.XXXXXX" (Xはランダムな英数字)と変形しnonce文字列とします。
アップロードされるファイル名は、"filename.XXXXXX.enc"とします。
nonce文字列が一致しないとデコードできませんので、ファイル名を変更すると
復号できなくなります。
ファイル名の暗号化が選択されている場合には、アップロードファイル名の命名を
次の方法で行います。
生成したnonce文字列を、UTF8エンコードのバイナリ列にします。
このバイナリストリームを、ファイルの暗号化と同様の方法で暗号化します。
鍵ストリームの生成は、ユーザが提供したパスワードをパスワード文字列、
アップロードされたファイルのAmazon Driveにおけるidをnonce文字列として
前述の方法で行います。
生成された暗号化バイト列を、1byteずつ、x -> '\u2800'+x のUnicode文字に変換し、
アップロードしたファイルのファイル名とします。
この文字は、点字でちょうど256種類あります。
復号する際は、逆にnonce文字列を求めてから復号します。
もどる