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)
你没有说明你属于哪个政府机构,所以我将假设美国国防部.
这种加密方案将无法满足除分类为"机密"或在具有与条块分割(或UCI具有相同的"机密"限制一个特殊的分类数据的美国国防部的数据安全要求有效的限制).
这主要是因为您没有使用经过批准的加密方案来保护数据完整性,提供篡改证据,并且包含经过批准的对称密码.您还在RSA加密呼叫期间阻止了OAEP填充,这已经很长一段时间了.
但你的问题也是不正确的."分类数据"是一个事物而不是真正的安全级别.数据具有分类,流程和这些流程中涉及的数据也是如此.分类是一个迭代过程,用于根据数据的价值,所有相关系统的威胁模型以及传输或存储中数据丢失,被盗或修改的总体影响来确定数据的安全要求.
为了使您的方案正确,我建议您执行以下操作:
上述方案在技术上将满足美国国防部信息安全标准手册中"绝密"机密信息的基本加密要求.
在存储,代码审查,可认证的可靠性等方面还有更多内容.这是一个巨大的审查过程,它非常复杂.这不是一个独立的开发人员能够轻松完成的事情.
最后,您说明您正在加密机密数据,我假设您不是信息安全或加密专家.在某些情况下,建议您需要聘请主题专家来进行架构流程.在美国,如果您不遵循批准的流程来开发处理任何类型敏感信息的软件,您可能会面临罚款或入狱时间(在疏忽案件中).但更重要的是,如果没有全面的代码审查,没有人可能会接受您的软件,并且很可能他们不会接受C#代码,因为对相关运行时的验证不够,除非您使用的是自定义运行时.在美国政府的敏感数据世界中,大多数时候你一直坚持使用C,C++或Java(罕见).