0

I have a tcl/tk based tool, which uses network password for authentication. Issue is that, it is saving password in the logs/history. So objective is to encrypt the password.

I tried to use aes package. But at the very beginning aes::init asks for keydata and initialization vector (16 byte). So how to generate IV and keydata. Is is some Random number? I am a novice in encryption algorithms.

4

2 回答 2

1

如果您在日志/历史记录中有密码,为什么不首先修复记录/存储它的错误?

否则,您可能想要一些不同的东西:

  1. 一种密码散列方案,如PBKDF2,等bcryptargon2以安全的方式存储密码并与一些用户输入进行比较。当您需要在服务器端使用密码实现某种身份验证时,通常会出现这种情况。

  2. 像 AES 一样的密码加密和保护方案。您需要密码才能自动对某些服务进行身份验证,并且它需要某种形式的明文密码。

  3. 您有一些秘密数据,需要以非明文形式安全地存储。

如果您有案例 1,请不要使用该aes软件包,它是适合该工作的错误工具。如果您有案例 2,该aes软件包可能会对您有所帮助,但您只是将保持密码保密的问题与保持密钥保密的另一个问题交换了(不是一个巨大的胜利)。因此,唯一可行aes的选择可能是 3。

假设您需要以可逆方式存储一些秘密数据,例如上面的案例 3。

AES 有几种可能的操作模式,常见的有ECB, CBC, OFB, GCM, CTR. Tcllib 包只支持ECBand CBC,并且只有CBC(这是默认的)是一个真正可以使用的选项。请访问Wikipedia了解为什么您永远不应该使用ECB模式的示例。

现在回到你的实际问题:

初始化向量 (IV)

这是您为每次加密选择的随机值,它不是秘密,您可以将其与加密数据一起发布。选择一个随机 IV 有助于使两个加密块不同,即使您使用相同的密钥和明文。

密钥

这也是一个随机值,但您必须对其保密,因为它可以用于加密和解密。您通常拥有用于多个加密的相同密钥。

从哪里获得好的随机性?

/dev/urandom如果您在 Linux、BSD或其他 unixoid 系统上,只需从getrandom(). 不要使用 Tclsexpr {rand()}或类似的伪随机数生成器 (PRNG)。在 Windows TWAPI 上,该CryptGenRandom函数将是最好的主意,但遗憾的是没有包含 Tcl 高级包装器。

够了吗?

要看。如果您只是想从粗略的外观中隐藏一点纯文本,也许。如果您有攻击者操纵您的数据或积极尝试入侵您的系统,那就更少了。普通的 AES-CBC 有很多你可以做错的事情,甚至专家也做错了(阅读有关 AES-CBC 的 SSL/TLS 1.0 问题)。

最后的话:如果您是加密算法的新手,请确保您了解您想要和需要保护的内容,有很多陷阱。

于 2016-03-03T19:39:11.693 回答
0

如果我在 aes 上阅读Tcler 的 Wiki 页面,我会看到我通过执行以下操作进行了加密:

package require aes

set plaintext "Some super-secret bytes!"
set key "abcd1234dcba4321";                        # 16 bytes

set encrypted [aes::aes -dir encrypt -key $key $plaintext]

我通过以下方式解密:

# Assuming the code above was run...
set decrypted [aes::aes -dir decrypt -key $key $encrypted]

请注意,解密后的文本在末尾添加了 NUL(零)字节(在本例中为 8 个),因为加密算法始终适用于 16 字节的块,如果您使用的是非 ASCII 文本,则encoding convertto可能encoding convertfrom是必要的。


aes::init除非你在做大规模流加密,否则不需要直接使用。您的用例听起来不需要那种东西。(关键数据是你的“秘密”,初始化向量是标准化的东西,通常你不需要设置。)

于 2016-03-03T10:14:07.750 回答