![]() |
1
2
避免使用ECB。它可以显示加密内容的信息。任何两个具有相同明文的块将具有相同的密文。CBC可以避免这种情况,但需要生成或保存IV。
根据数据的使用方式,您可能需要包括一个MAC。ECB和CBC的设计目的不是检测密文的任何更改,这些更改将导致明文中的垃圾。您可能希望在加密数据中包含一个HMAC,以便在将其作为canon之前对其进行身份验证。会话HMAC密钥必须从会话加密密钥派生。或者,您可以使用PCBC模式。PCBC是用来检测密文中的变化的,但它的能力受到填充大小的限制,它依赖于加密的数据,并不是所有的加密api都将其作为一个选项。 一旦你已经包括了一个MAC,那么你应该考虑采取措施防止重播攻击。任何时候,只要有人能够在会话范围内重新发送旧数据,就有可能发生重播攻击。使会话密钥的使用范围尽可能窄而不给用户造成问题是阻止重播攻击的一种方法。您还可以在加密数据中包含日期和时间,以便在数据被视为有效时创建一个窗口。 在夏天,保护钥匙只是冰山一角。 |
![]() |
2
15
An IV must always be a Cryptographic Nonce . 您的代码明显违反了CWE-329。 不应使用ECB模式,必须使用CBC模式,这是为什么:
使用ECB模式加密:
使用CBC模式加密:
|
![]() |
3
2
也就是说,你应该仔细考虑你放在饼干里的东西。这取决于您在系统上的存储方式,但您可以简单地选择一个随机数(比如64位数字),并将其存储在cookie中。在您的服务器端系统中,您将记录该号码与谁关联以及其他详细信息。这完全避免了加密。您可以使用其他详细信息来验证(在任何可以验证的范围内)cookie是否是从最初发送到的浏览器发回的。 或者,可以为每个会话使用不同的加密密钥,跟踪哪个会话使用了哪个密钥。
|
![]() |
4
2
如果你用长钥匙,我会说钥匙很安全。有些事情你要关心:
如何验证数据的一些示例如下:
|
![]() |
5
0
AES-128应该是足够的,不需要使用更长的密钥-如果密钥是随机选择的。
第二个问题是,您还应该附加一个消息身份验证代码。否则你将无法区分伪造的曲奇和好曲奇。 |