もどる

暗号化仕様 TS viewer for Amazon Cloud Drive

Last Update: 2017/02/02

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の生成

nonce文字列は、ファイル名から生成します。

重複を避けるため、filenameをオリジナルファイル名としたとき、
"filename.XXXXXX" (Xはランダムな英数字)と変形しnonce文字列とします。
アップロードされるファイル名は、"filename.XXXXXX.enc"とします。

nonce文字列が一致しないとデコードできませんので、ファイル名を変更すると
復号できなくなります。

ファイル名の暗号化

ファイル名の暗号化が選択されている場合には、アップロードファイル名の命名を
次の方法で行います。

生成したnonce文字列を、UTF8エンコードのバイナリ列にします。
このバイナリストリームを、ファイルの暗号化と同様の方法で暗号化します。
鍵ストリームの生成は、ユーザが提供したパスワードをパスワード文字列、
アップロードされたファイルのAmazon Driveにおけるidをnonce文字列として
前述の方法で行います。

生成された暗号化バイト列を、1byteずつ、x -> '\u2800'+x のUnicode文字に変換し、
アップロードしたファイルのファイル名とします。
この文字は、点字でちょうど256種類あります。

復号する際は、逆にnonce文字列を求めてから復号します。

もどる