2

.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に存在する機能はありませRfc2898DeriveBytesRandomNumberGenerator。したがって、パスワードとSALTからKey&IVを導出する方法を見つけることができませんでした。

2-(質問#1を解決したと仮定)キーとIVを安全な方法で.NET Framework PCに送信するためにガジェットがインターネットに接続されていないため、暗号化/復号化ごとにランダムなキーとIVを使用することはできません。したがって、別の解決策を考えます。パスワードとSALTからキーとIVを取得し、ガジェット(暗号化)とPC(復号化)の両方が同じパスワードとSALTを使用する場合、それを処理できます。はい、声が聞こえます。同じIVなどを複数の暗号化に使用しないでください。ただし、コストやその他の問題のため、ガジェットをWi-Fiに接続しないでください。このような状況では、これはこれを行うための安全な方法ですか、それとも大幅な改善(公開鍵と秘密鍵の実装など)が必要ですか?そしてどうやって?

アドバイスをいただければ幸いです、ありがとう

ムラト

4

1 に答える 1

0

.net Micro Framework は使用していません。ただし、API リストにはRNGCryptoServiceProviderと呼ばれる乱数ジェネレーターがあります。Rfc2898DeriveBytes は、Hmac-Sha1 を使用した単なる PBKDF2 実装であり、HMAC-SHA1 をサポートするKeyedHashAlgorithmクラスが存在します (非常に単純なアルゴリズムPBKDF2を参照してください)。

于 2012-10-15T17:33:49.840 に答える