【问题标题】:How to pick a password for AES using cryptoJS, or node's default crypto?如何使用cryptoJS或节点的默认密码为AES选择密码?
【发布时间】:2018-03-09 17:42:09
【问题描述】:

我对 AES 的初始设置不太了解,但我了解算法本身在我们开始第 2-14 轮(subBytes、shiftRows、mixColumns、addRounKey)后如何工作,具体取决于密钥的大小。

我不遵循的是初始密码和设置。我们是选择任意长度的密码,还是创建自己的 128、192 或 256 位密码,然后在整个应用程序中使用?

例如,在这个使用 AES 和 cryptojs 的例子中:

var myString   = "attack at dawn";
var myPassword = "superSecretPassword";
var encrypted = CryptoJS.AES.encrypt(myString, myPassword);

myPassword 变量是否通过散列运行以创建 128、192 或 256 位密钥?为了获得最佳安全性,我们是否应该已经将myPassword 设为 256 位?

【问题讨论】:

    标签: node.js cryptography aes cryptojs


    【解决方案1】:

    您的困惑是 100% 由于 crypto-js 中的错误 API。

    在现实世界中,加密是通过密钥完成的,而不是密码。如果一个人只有一个密码,那么他们应该使用基于密码的密钥派生函数将其转换为一个密钥,例如 pbkdf2、scrypt、bcrypt 或 argon2。

    在 crypto-js 中,可以使用密钥或密码(两种不同的 API 调用)进行加密。 crypto-is 中的密码基础加密是非标准的,并且使用了不安全的基于密码的密钥派生函数。

    结果:不要使用基于 crypto-js 密码的加密 API。相反,请使用接受密钥和 IV 的 API,其中密钥是 128 位、192 位或 256 位。

    参考资料:

    【讨论】:

    • 感谢您的帖子!我发现这个函数可以生成一个 256 位密钥、一个 iv 和一个盐。 openssl enc -aes-256-cbc -k secret -P -md sha1。如果可能的话,你能解释一下IV是如何工作的吗?我是安全和密码学的新手,想确保我做对了。我也无法在 Crypto-JS api 上看到如何强制 256 位加密,或如何指定密钥 + iv,但现在将开始搜索。
    猜你喜欢
    • 1970-01-01
    • 2014-12-16
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多