.NET Micro Frameworkアプリケーションを実装していて、次のようなコードがあります。
public static void Main()
{
string data = "Here is some text to encrypt.";
AesCryptoServiceProvider csp = new AesCryptoServiceProvider();
csp.GenerateKey();
csp.GenerateIV();
CryptoKey k = csp.Key;
byte[] iv = csp.IV;
byte[] key = k.ExportKey(true);
AesCryptoServiceProvider csp2 = new AesCryptoServiceProvider();
byte[] enc = AesEncrypt(UTF8Encoding.UTF8.GetBytes(data), key, iv);
byte[] dec = AesDecrypt(enc, key, csp.IV);
char[] c = UTF8Encoding.UTF8.GetChars(dec);
string decodedStr = new string(c);
Debug.Print("\n dec: " + decodedStr );
}
public static byte[] AesEncrypt(byte[] data, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
{
csp.Key = CryptoKey.ImportKey(csp.Session, key,
CryptoKey.KeyClass.Secret, CryptoKey.KeyType.AES, true);
csp.IV = iv;
using (ICryptoTransform encr = csp.CreateEncryptor())
{
return encr.TransformFinalBlock(data, 0, data.Length);
}
}
}
public static byte[] AesDecrypt(byte[] encryptedData, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider csp = new AesCryptoServiceProvider())
{
csp.Key = CryptoKey.ImportKey(csp.Session, key,
CryptoKey.KeyClass.Secret, CryptoKey.KeyType.AES, true);
csp.IV = iv;
using (ICryptoTransform decr = csp.CreateDecryptor())
{
return decr.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
}
}
}
私のガジェット(FEZ Hydra)はいくつかのテキストを暗号化します。インターネットに接続できないため、OLEDディスプレイまたはsthを介して出力します。そして、それを.NETFrameworkPCで復号化します。今私は2つの質問があります:
1-残念ながら、.NETMF 4.2 RTM(QFE2)には、またはなどの.NETFrameworkに存在する機能はありませRfc2898DeriveBytes
んRandomNumberGenerator
。したがって、パスワードとSALTからKey&IVを導出する方法を見つけることができませんでした。
2-(質問#1を解決したと仮定)キーとIVを安全な方法で.NET Framework PCに送信するためにガジェットがインターネットに接続されていないため、暗号化/復号化ごとにランダムなキーとIVを使用することはできません。したがって、別の解決策を考えます。パスワードとSALTからキーとIVを取得し、ガジェット(暗号化)とPC(復号化)の両方が同じパスワードとSALTを使用する場合、それを処理できます。はい、声が聞こえます。同じIVなどを複数の暗号化に使用しないでください。ただし、コストやその他の問題のため、ガジェットをWi-Fiに接続しないでください。このような状況では、これはこれを行うための安全な方法ですか、それとも大幅な改善(公開鍵と秘密鍵の実装など)が必要ですか?そしてどうやって?
アドバイスをいただければ幸いです、ありがとう
ムラト