2012-02-20 47 views
3

ファイルの作成中にファイルを暗号化し、ファイルの読み取り中にAESアルゴリズムを使用してファイルを復号したいとします。私はvfs_write()vfs_read()のコードをそれぞれ暗号化と復号化のために書いていますが、うまく働いていますが、今は唯一の問題は、長さが16の倍数でないvfs_write()(AESブロックサイズ)それを16の倍数にするためにパディングを行い、このサイズのbczがファイルのサイズを増やしますが、write()関数はこれを知らないので拒否しますLinuxカーネルでAESを使用した暗号化と復号化

例: - "123"とデータを入力するとします。ここでlengthは4(3長のデータ+ 1 '\ 0'文字)であるため、AESは16バイトにするために12バイトをパディングしますが(AESは16バイトブロックで動作します)、write()は4、そして私はファイルサイズを16(この場合)に変更する方法と、カーネルでファイルサイズを変更する方法を知りたいコード。

私はまた、私は

if(file->f_flags & O_APPEND) 
    *pos=i_size_read(inode); 

を試みたが、これはbczカーネルのハングを動作していないとも私はどこつまり、このような事をする理解していないです、その機能とどのようにこの

inode->i_size=new_length; 
inode->i_op->truncate(inode); 

を試してみました。 でも、新しい変数の値を変更しようとしましたが、 "cat write error:デバイスにスペースが残っていません"というエラーが表示されます。

私は16

+3

太字で書いたすべての単語に対して、あなたは何セントですか? :S(興味深い質問、ちなみに) –

答えて

1

あなたの現在のモードがパディングを必要とする複数のファイルを渡すとき、それは正常に動作します。場合によっては(あなたが会うもののように)パディングをするのが難しい場合があります。通常、ディスク/ファイルシステムの暗号化は、パディングを必要としない(ランダムな読み書きを行い易い)他のモードで行われます。ブロック暗号モードの

概要:http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

モード:ECB、CBC、PCBC、CFB、OFBは、CTR(カウンター)は、パディングを必要としないパディング

とモードが必要です。

このモードは簡単で、誤った(安全でない、簡単に中断する)方法で実装する方が簡単です。

さらに高度なモード(XEX、XTS)のディスク暗号化http://en.wikipedia.org/wiki/Disk_encryption_theoryの概要があります。それらのうちのいくつかはまだパディングが必要です。でも普遍暗号モードで使用すると、多くの問題が...そのうちのいくつかは、"Cryptfs: A Stackable Vnode Level Encryption File System"

1

を覆われてしまいます

は、なぜあなたは意図的に16バイト作り、それを暗号化して、復号化の後にパディングを捨てるいけません。私はエースだけに頼るのではなく、自分でやってください。これにより、取得しているデータが正しいことを確認してください。

関連する問題