具有多个密钥的级联加密

问题描述 投票:0回答:3

AES是对称加密,所以如果我使用key1加密,我总是可以使用key1解密。如果我使用key2加密,我总是可以使用key2解密。

我想用多个密钥多次应用此加密来加强它。我想首先使用key1加密我的密码,然后使用key2加密结果,然后使用key3加密结果,依此类推。如下图所示:

  • cipher - > enc with key1 - > enc with key2 - > enc with key3 - > result

为了解密结果,我必须反向解密:

  • 结果 - > dec with key3 - > dec with key2 - > dec with key1 - > cipher

我的问题是,是否存在表示key1,key2和key3的产品的密钥,以便它将在一次传递中解密结果?意思是,攻击者是否可以简单地找到一个会使我的方案短路的密钥4?

  • result - > dec with key4 - > cipher
aes encryption
3个回答
1
投票

目前AES没有这样的东西,也不可能存在。只有AES算法存在严重缺陷才能实现这一点。

这并不意味着您无法找到可能存在此类密钥的具体示例(仍然非常不可能),但是没有从多个其他密钥中提取组合密钥的过程。


1
投票

CryptoLib(https://github.com/IcyApril/CryptoLib)支持使用不同加密密码的级联(分层)加密;它使用1个密钥,但在每个加密级别进行PBKDF2散列(在Whirlpool和SHA512之间进行SOHA交替)。这将保护您,以防一个密码被破坏,其他密码仍然站在它的位置,为了调用它,您只需执行此操作(替换路径/与您放置CryptoLib的位置):

<?php
  require_once('path/to/cryptolib.php');
  $encryptedString = CryptoLib::encryptData("Test string.", "password");
  $decryptedString = CryptoLib::decryptData($encryptedString, 'password');
?>

要直接回答最初的问题,建立在此基础上:为了使用三个独立的密钥(以级联方式)与CryptoLib,您可以只调用加密函数三次。

<?php
  require_once('path/to/cryptolib.php');
  $encryptedString = CryptoLib::encryptData("Test string.", "password1");
  $encryptedString = CryptoLib::encryptData($encryptedString, "password2");
  $encryptedString = CryptoLib::encryptData($encryptedString, "password3");
?>

要解密字符串,请反向调用解密函数3次:

<?php
  require_once('path/to/cryptolib.php');
  $decryptedString = CryptoLib::decryptData($encryptedString, "password3");
  $decryptedString = CryptoLib::decryptData($decryptedString, "password2");
  $decryptedString = CryptoLib::decryptData($decryptedString, "password1");
?>

CryptoLib源代码位于GitHub:https://cryptolib.ju.je/,文档站点为https://cryptolib.ju.je


0
投票

由于meet-in-the-middle attack,对于AES-128,三重加密的安全性为O(2 ^ 256)。

在3-DES设计时发现了这种攻击。

实际上,AES设计具有不同的密钥大小,用于未来攻击的发展以及除量子计算之外的可能的硬件改进。 AES by designs有128,192和256位。 AES-256将比具有相同安全性的3-AES-128更快。

© www.soinside.com 2019 - 2024. All rights reserved.