我开始学习加密算法,我理解上面提到的算法是如何工作的.AES的密钥长度是否更长?AES加密的哪些步骤使其不如DES易受攻击?
我的公司将为我们的客户存储敏感数据,并将使用其中一个托管的.NET加密算法类加密数据.大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储密钥.我做了一些轻松的搜索和阅读,似乎硬件解决方案可能是最安全的.有没有人对密钥存储解决方案或方法有任何建议?
感谢您的回复,大家.
spoulson,问题实际上是你提到的"范围".我想我应该更清楚一点.
数据本身以及加密和解密它的逻辑被抽象为ASP.NET配置文件提供程序.此配置文件提供程序允许加密的配置文件属性和纯文本属性.加密属性值的存储方式与纯文本值完全相同 - 除非它们已加密.
也就是说,密钥需要能够被召唤出于以下三个原因之一:
我想象的方式是没有人会真正知道密钥 - 会有一个软件控制数据的实际加密和解密.也就是说,钥匙仍然需要来自某个地方.
完全披露 - 如果你还不能说,我以前从未做过这样的事情,所以如果我完全不了解我应该如何运作,那么请告诉我.
我们有一台服务器,其数据库具有对称密钥(数据库 - >安全 - >对称密钥).我们有一个备份重复数据库,我们将其用作测试数据库,但我们没有此密钥.
如何复制此对称密钥(或创建一个与旧密钥完全相同的新密钥)并将其放入现有数据库中?它必须具有与另一个相同的值和键名.
这是在SQL Server 2008上.
是否有任何文档,包括生成强大RSA密钥的技巧?
我的意思不仅是“将XXX实用程序与-X标志一起使用”。
我的意思是理论上有一些规则。例如,模块n不应小于1024位,依此类推。
有人可以告诉我吗?
我目前正在用 C# 开发一个小工具,它允许我快速加密我的文件。所以我使用了这个看起来很适合我的脚本。但我仍然有一个问题:密钥太短(最多 8 个字符)。我在 RijndaelManaged() 文档中读到密钥的最大大小为 256 位,所以我应该能够使用 64 个字符的密钥......(如 sha256 哈希)
但是每次我尝试增加密钥大小时,我都会得到一个很好的“加密失败!”,即使是 9 个字符。我一直在谷歌上寻找解决方案一段时间,但没有任何用处。
我发现的最好的事情是这个。所以我试图改变填充,如:
RMCrypto.Padding = PaddingMode.ISO10126;
// or
RMCrypto.Padding = PaddingMode.ANSIX923;
Run Code Online (Sandbox Code Playgroud)
但这并没有改变什么......
我使用下一个代码创建SQL加密密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Pass>'
CREATE CERTIFICATE MyEncryptCert WITH SUBJECT = 'Descryption', EXPIRY_DATE = '2115-1-1'
CREATE SYMMETRIC KEY MySymmetricKey WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE MyEncryptCert
Run Code Online (Sandbox Code Playgroud)
我如何加密数据
OPEN SYMMETRIC KEY MySymmetricKey DECRYPTION BY CERTIFICATE MyEncryptCert
SET @Result = ENCRYPTBYKEY(KEY_GUID('MySymmetricKey'), '<String to encrypt>')
CLOSE SYMMETRIC KEY MySymmetricKey
Run Code Online (Sandbox Code Playgroud)
我能够备份数据库主密钥和证书。
BACKUP MASTER KEY TO FILE = 'c:\temp\key' ENCRYPTION BY PASSWORD = '<Pass>';
BACKUP CERTIFICATE MyEncryptCert TO FILE = 'c:\temp\cert' WITH PRIVATE KEY(ENCRYPTION BY PASSWORD='<Pass>', FILE='C:\temp\cert.pvk')
Run Code Online (Sandbox Code Playgroud)
但是我不能备份对称密钥。没有它,如果我将加密表移至另一个数据库,则无法解密加密数据。
有什么解决办法吗?
PS我尝试了下一个代码,但对我来说似乎并不安全,因为如果您知道KEY_SOURCE和IDENTITY_VALUE,则实际上不需要原始的数据库主密钥和证书即可解密数据 …
我在 iOS 应用程序(我的第一个应用程序)上遇到了一些障碍,我想加密发送到服务器的数据。
为此,我生成一个存储在钥匙串中的对称密钥。
密钥通过以下方式生成:
SymmetricKey(data: password)
Run Code Online (Sandbox Code Playgroud)
在此函数中,密码实际上是计算得出的 SHA256,如下所示:
SHA256.hash(data: password)
它为我提供了一个摘要,并从中提取数据表示以创建我的密钥。
现在,当我加密数据时,我会执行以下操作
var encryptedData: Data = Data()
if let key: SymmetricKey = try? readKey(account: encryptingKeyAccount){
encryptedData = try! ChaChaPoly.seal(rawData, using: key).combined
}
return encryptedData
Run Code Online (Sandbox Code Playgroud)
这会返回我然后发送到服务器的数据。
为了解密数据,我执行以下操作:
var decryptedData: Data = Data()
if let key: SymmetricKey = try? readKey(account: encryptingKeyAccount) {
let sealedBox = try! ChaChaPoly.SealedBox(combined: encryptedData)
decryptedData = try! ChaChaPoly.open(sealedBox, using: key)
}
return decryptedData
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,如果我注销(这意味着从手机中删除密钥)并重新登录(在我看来,这会重新创建之前创建的相同密钥),那么我将无法解密我的数据......我有当我尝试打开盒子时出现以下错误:
Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: CryptoKit.CryptoKitError.authenticationFailure
Run Code Online (Sandbox Code Playgroud)
我相信这是由于我创建密钥的方式所致,该密钥与之前删除的密钥不同......
我怎样才能解决这个问题 …
我想知道所有有权访问对称密钥的用户以及他们拥有的访问类型。你能让我知道我该怎么做吗?
在Azure IoT中心创建共享访问策略或注册设备时,将生成主键和辅助密钥对.我注意到我可以使用主键或辅助键将设备连接到IoT集线器.
那么,拥有主/辅助键的目的是什么?我应该如何设计两个键的使用?
我以前从未处理过PCI合规问题.我一直在阅读他们的文件,它说我需要保护信用卡号码,有效期和持卡人的姓名.无需存储安全代码.
在他们的文档中,它只是说保护.这是说我需要在我的数据库中加密这3列吗?我以为只有数字是需要加密的数据.无论哪种方式,我很好.
如果我需要加密所有三列,我是否共享一个证书并拥有3个对称密钥,或者我只需要1个,并且所有3列都使用该对称密钥?我问的原因是在加密列的BoL文档中,密钥是在加密列之后专门命名的.
感谢您的帮助!
symmetric-key ×10
encryption ×5
cryptography ×2
sql ×2
sql-server ×2
algorithm ×1
azure ×1
c# ×1
database ×1
iot ×1
key-storage ×1
pci-dss ×1
rijndael ×1
rsa ×1
security ×1
swift ×1