注意:这个问题最初把“数字签名”和"MAC“混为一谈,而我后来了解到,这并不是一回事。对“签名”的任何提及(在答复或任何评论中)都应理解为"MAC“。
我正在试验奥斯代币,我正试着用最好的方法来解决这个问题。
accountID、nonce和expiry的令牌。然后将令牌传递回客户端,用于下一个请求。accountID)。MAC是从plaintext值创建的,以确保它没有被篡改。plaintext值(包括MAC)进行加密,以确保其安全模糊。macKey或encryptionKey。客户端不打算访问令牌的plaintext内容。///process.env.TOKEN_ENCRYPTION_PASSWORD = '13sd4089f-268c-483d-9e82-jk3c1b47c77a';
///process.env.TOKEN_MAC_KEY = '1fde05f4-268c-483d-9e82-85fc1b42321';
/// Successful login by user ...
var token = {
nonce : 'SOME-UUID-GOES-HERE',
accountID : 'account-12345',
expires : 1234567890
};
token.mac = crypto.createHmac('sha512', TOKEN_MAC_KEY)
.update(JSON.stringify(token))
.digest('base64');
var encryptedToken = cryptoJS.AES.encrypt(JSON.stringify(token), TOKEN_ENCRYPTION_PASSWORD).toString();
response.send({
message : 'Created, MAC'd, and encrypted an auth token.',
authToken : encryptedToken
});MAC-then-encrypt方法安全吗?我读过一些关于这方面的意见,比我开始的时候更困惑地走开了。cbc-mode方法时应该使用MAC-then-encrypt。这是CryptoJS.AES.encrypt()的默认模式吗?CryptoJS.AES似乎相当通用。这是默认的AES256吗?或者这是我需要在代码中明确声明的东西吗?CryptoJS.AES.encrypt()时,我看到它会自动生成一个“幕后”的key和iv。生成自己的key和iv会更安全吗?还是应该让CryptoJS来处理呢?MAC-encrypt-MAC方法可以获得更多的安全性,还是仅仅增加了我的应用程序逻辑的复杂性?发布于 2016-12-20 21:43:46
CryptoJS.AES.encrypt()默认为单个块加密或不安全的ECB。在你的计划里我唯一不明白的就是为什么现在?用在你的生意上?是为了某种所谓的“密码安全”吗?它被用作CSRF令牌?
https://security.stackexchange.com/questions/145573
复制相似问题