サーバーとクライアントの間の単純で安全なデータ交換を開発していますが、AES の実装時にいくつかの問題があります。
私はすでに共有鍵交換 (公開鍵暗号を使用) を実装しており、正常に動作します。私の頭の中のアイデアは(疑似コード)でした:
SERVER
ciphertext = AES.encrypt(sharedKey,data)
send(ciphertext)
CLIENT
ciphertext = receive()
plaintext = AES.decrypt(sharedKey,ciphertext)
そしてほら。それを実装しようとしたとき、最初にIVがあることに気づきました。最初に、次のようにすべてゼロに設定してみました。
self.cipher = AES.new(self.Kshared, AES.MODE_CFB, '0000000000000000')
while( there is data to send ):
ciphertext = self.cipher.encrypt(data)
self.sendData(ciphertext)
次に、クライアントで:
cipher = AES.new(Ksecreta, AES.MODE_CFB,'0000000000000000')
while( there is data to receive ):
plaintext = cipher.decrypt('0000000000000000'+data)[16:]
これは FIRST メッセージでは問題なく機能しますが、残りのメッセージでは機能しません。私の問題は IV と関係があるのではないかと思いますが、わかりません。さらに、私が見つけた最初の実装では、ソルトを使用して別のキーとランダムな IV を生成しましたが、問題は、サーバーがどのソルト/IV を使用しているかクライアントが認識できないことです。公開鍵暗号を介して送信できると思いますが、最初に単純に機能する AES 暗号が必要です。
ありがとう。