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

时间:2014-08-19 16:00:33

标签: 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);
}
}
}

1 个答案:

答案 0 :(得分:9)

您没有说明您属于哪个政府机构,所以我将担任美国国防部。

此加密方案将满足任何美国国防部数据安全要求,但分类为“机密”的数据或具有“机密”限制的特殊分类(或具有相同的UCI)< em>有效限制)。

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

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

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

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

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

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

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