这种C#代码对于分类数据的RSA加密是否安全?

jav*_*ost -3 c# security encryption cryptography rsa

我将加密CLASSIFIED数据,我的数据必须使用最先进的加密保护.我使用AES加密数据,使用RSA加密密钥.我的RSA代码如下.请确认此代码是否安全:

  static class Program
  {
    static void Main()
    {
      var csp = new RSACryptoServiceProvider(3072);
      var privKey = csp.ExportParameters(true);
      var pubKey = csp.ExportParameters(false);
      string pubKeyString;
      {
        var sw = new System.IO.StringWriter();
        var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
        xs.Serialize(sw, pubKey);
        pubKeyString = sw.ToString();
      }
  {
    //get a stream from the string
    var sr = new System.IO.StringReader(pubKeyString);
    //we need a deserializer
    var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));
    //get the object back from the stream
    pubKey = (RSAParameters)xs.Deserialize(sr);
  }
  csp = new RSACryptoServiceProvider();
  csp.ImportParameters(pubKey);
  var plainTextData = "foobar";
  var bytesPlainTextData = System.Text.Encoding.Unicode.GetBytes(plainTextData);
  var bytesCypherText = csp.Encrypt(bytesPlainTextData, false);
  var cypherText = Convert.ToBase64String(bytesCypherText);
  bytesCypherText = Convert.FromBase64String(cypherText);
  csp = new RSACryptoServiceProvider();
  csp.ImportParameters(privKey);
  bytesPlainTextData = csp.Decrypt(bytesCypherText, false);
  plainTextData = System.Text.Encoding.Unicode.GetString(bytesPlainTextData);
}
}
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ray 9

你没有说明你属于哪个政府机构,所以我将假设美国国防部.

这种加密方案将无法满足除分类为"机密"或在具有与条块分割(或UCI具有相同的"机密"限制一个特殊的分类数据的美国国防部的数据安全要求有效的限制).

这主要是因为您没有使用经过批准的加密方案来保护数据完整性,提供篡改证据,并且包含经过批准的对称密码.您还在RSA加密呼叫期间阻止了OAEP填充,这已经很长一段时间了.

但你的问题也是不正确的."分类数据"是一个事物而不是真正的安全级别.数据具有分类,流程和这些流程中涉及的数据也是如此.分类是一个迭代过程,用于根据数据的价值,所有相关系统的威胁模型以及传输或存储中数据丢失,被盗或修改的总体影响来确定数据的安全要求.

为了使您的方案正确,我建议您执行以下操作:

  • 为需要彼此交换数据的所有各方生成密钥对
  • 在交换数据之前,生成一个随机的256位值作为密钥
  • 使用目标方的公钥加密256位密钥值,并使用发件人的私钥对结果进行数字签名
  • 使用带键值的AES-256-ICM加密数据,对结果进行数字签名
  • 将最后两个操作的结果传送到目的地
  • 目的地验证加密密钥和加密数据的签名
  • 目标解密密钥并使用该密钥解密数据
  • 目的地现在具有解密数据

上述方案在技术上将满足美国国防部信息安全标准手册中"绝密"机密信息的基本加密要求.

在存储,代码审查,可认证的可靠性等方面还有更多内容.这是一个巨大的审查过程,它非常复杂.这不是一个独立的开发人员能够轻松完成的事情.

最后,您说明您正在加密机密数据,我假设您不是信息安全或加密专家.在某些情况下,建议您需要聘请主题专家来进行架构流程.在美国,如果您不遵循批准的流程来开发处理任何类型敏感信息的软件,您可能会面临罚款或入狱时间(在疏忽案件中).但更重要的是,如果没有全面的代码审查,没有人可能会接受您的软件,并且很可能他们不会接受C#代码,因为对相关运行时的验证不够,除非您使用的是自定义运行时.在美国政府的敏感数据世界中,大多数时候你一直坚持使用C,C++或Java(罕见).