ind*_*div 5 security encryption cryptography
我有2个设备,我想在它们之间建立一个安全的通信通道.唯一的共享秘密是(7到20个字符的ASCII)密码.如果我使用PBKDF2(来自RFC 2898)使用公共盐,迭代和密码来生成双方的AES256-CBC密钥和IV,我想我可以一步验证用户并提供加密通道.是真的,还是有一些原因我只看到人们使用PBKDF2来验证密码?
我的理由是,双方都需要知道密码才能生成相同的密钥和IV.因此,如果设备B可以解密来自设备A的数据,他们都证明他们具有相同的密码短语.
PBKDF2 是从共享密钥生成公共密钥的好方法(尽管您不应该以这种方式生成 IV - IV 应该是随机的,并与密文一起发送)。
但是,CBC 不是一种身份验证密码模式。这是因为攻击者可以获取加密消息并对其进行可预测的修改,而无需能够读取消息或知道密钥。此类攻击过去曾破坏过现实世界的系统。
您可以使用验证密码模式,例如 Galois Counter Mode (GCM) 而不是 CBC。
另一种方法是 Encrypt-Then-MAC。使用带有两种不同盐的 PBKDF2 来生成两个不同的密钥 - 首先使用 CBC 和第一个密钥对数据进行加密,然后使用第二个密钥对密文计算 HMAC。
您还需要使用一次性随机数来防止重放攻击。