问题标签 [block-cipher]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encryption - Encryption: TCB (Tweaked CodeBook) algorithm - what is it?
Can someone please provide a description of TCB algorithm?
algorithm - 整数的对称双射算法
我需要一种算法,可以将 32 位有符号整数一对一映射(即无冲突)到另一个 32 位有符号整数。
我真正关心的是足够的熵,以至于函数的输出看起来是随机的。基本上我正在寻找一种类似于 XOR Cipher 的密码,但它可以生成更多看起来任意的输出。安全不是我真正关心的问题,尽管默默无闻是。
为澄清目的进行编辑:
- 该算法必须是对称的,这样我就可以在没有密钥对的情况下反转操作。
- 该算法必须是双射的,每个 32 位输入数字必须生成一个 32 位唯一数字。
- 函数的输出必须足够晦涩,只在输入中添加一个会对输出产生很大的影响。
预期结果示例:
F(100) = 98456
F(101) = -758
F(102) = 10875498
F(103) = 986541
F(104) = 945451245
F(105) = -488554
就像 MD5 一样,改变一件事可能会改变很多事情。
我正在寻找一个数学函数,所以手动映射整数不是我的解决方案。对于那些询问的人来说,算法速度并不是很重要。
encryption - 加密时反馈循环 (DES) 的目的是什么?
它会使加密更强大吗?我认为它用于确保密文更加“随机”。它并没有真正让它变得更强大,或者我认为。
encryption - TDEA和CBC模式?
我正在尝试掌握加密图和 TDEA(三重 DES)的窍门。我了解 TDEA 看起来像这样:
密文 = EK3(DK2(EK1(明文)))
我也知道链式块密码在加密之前使用 IV 播种加密和纯文本,然后输出是一个加密的块,新的 IV 是由第一个块的密文的输出形成的。正确的?
这意味着 CBC 模式下的 TDEA 会像这样流动:
纯文本 --> IV --> TDEA 加密 --> NEW IV --> 密文
下一个块是:
纯文本 --> NEW IV --> TDEA 加密 --> NEW NEW IV --> 密文
这将持续 n 个块。这是正确的还是我不明白它是如何工作的?
c - 如何破解弱化的 TEA 分组密码?
目前我正在尝试破解 C 中的 TEA 分组密码。这是一个分配,并且茶密码已被削弱,因此密钥是 2 个 16 位数字。
我们已经获得了使用密钥对明文进行编码并使用密钥对密文进行解码的代码。
我有一些明文示例:
- 明文(1234,5678)编码(3e08,fbab)
- 明文(6789,dabc) 编码 (6617,72b5)
更新
编码方法接受明文和一个密钥,encode(plaintext,key1)。使用另一个密钥再次发生这种情况以创建编码消息,encode(ciphertext1,key),然后创建编码的 (3e08,fbab) 或编码的 (6617,72b5)。
我将如何破解这个密码?
目前,我用每个可能的密钥对已知的明文进行编码;密钥大小为十六进制值 ffffffff。我把它写到文件中。
但现在我被困住了,需要方向。
我如何利用 TEA 的等效密钥弱点来减少破解密码所需的时间?另外,我将在中间攻击中使用一个人。
当我使用已知明文和所有密钥 1 进行编码时,它将创建所有具有关联密钥的加密文本并将其存储在表中。
然后,我将使用我分配中的已知密文以及 key2 的所有可能值进行解密。这将给我留下一张只解密过一次的解密表。
然后我可以比较这两个表,看看是否有任何带有 key1 的 encrpts 与带有 key2 的解密相匹配。
如果有人可以帮助我在代码中实现这一点,我也想使用等效的弱点。有任何想法吗?
encryption - AES-CTR 模式(流式加密)明文中的 1 位更改会更改密文中的 1 位?
据我了解,在流密码(或 AES CTR 模式)中,密钥实际上是使用 IV 加密的(或者通常,从密钥 K 我们产生伪随机字节)。然后,我们使用此密钥使用 XOR 加密明文。
但据我了解,假设使用相同的密钥 K,明文中一位的变化只会改变密文的一位。
我是对的,还是我完全错了?
如果我是对的,它不是比 CBC 更安全吗?(因为在 CBC 中,明文中一位的更改,从更改点开始更改密文中的所有位)
谢谢 !!!
c - C中的块密码字符串加密/解密
我正在尝试找到一个好的分组密码(AES、Blowfish 等)来加密/解密字符串。我在 C 中找不到任何好的示例。我在 C# 和 C++ 中找到了很多,在 c 中也找到了很多,但它们不支持char*
's. 如果有人能指出我正确的方向,那就太好了。
java - 初始向量的 CTR 模式使用(IV)
据我所知,CTR 模式不使用初始向量。它只需要一个计数器,用给定的密钥对其进行加密,然后将结果与明文进行异或运算,以获得密文。
其他分组密码模式(如 CBC)在进行加密之前会使用初始向量对明文进行异或运算。
所以这是我的问题。我在 Java 中有以下代码(使用 bouncycastle 库):
使用相同键对上述代码的每次不同调用都会产生不同的输出!但是在做的时候:
在上述代码的每次调用中,我都会得到相同的结果。但这是为什么呢?我的意思是,CTR 不需要 IV,那么为什么当我不在每次调用中都给出 IV 时我得到不同的结果,而当我给出 IV 时它返回相同的结果呢?如果我在使用 CTR 时总是使用上述 IV(全零),那会安全吗?
任何想法都会非常有帮助。谢谢
security - 使用 AES-GCM 协议的 nonce / IV 的来源和重要性
我正在制作一个使用 AES 加密的数据包(即,不是流)的协议。我决定使用 GCM(基于 CTR),因为它提供集成身份验证并且是 NSA 套件 B 的一部分。使用 ECDH 协商 AES 密钥,其中公钥由受信任的联系人签名,作为网络的一部分-使用 ECDSA 之类的信任。我相信我需要一个用于 GCM 的 128 位随机数/初始化向量,因为即使我为 AES 使用 256 位密钥,它始终是 128 位分组密码(对吗?) 我将在之后使用 96 位 IV阅读BC代码。
我绝对没有实现我自己的算法(只是协议——我的加密提供者是 BouncyCastle),但我仍然需要知道如何使用这个随机数而不是自找麻烦。使用相同 DH 密钥的两个人之间使用的 AES 密钥将保持不变,因此我知道不应将相同的 nonce 用于多个数据包。
我可以简单地在数据包中添加一个 96 位的伪随机数并让接收者将其用作随机数吗?这是点对点软件,数据包可以随时发送(例如,即时消息、文件传输请求等),速度是一个大问题,所以最好不要使用安全的随机数来源。随机数根本不必保密,对吗?还是必须像“加密安全”的 PNRG 一样随机?维基百科说它应该是随机的,否则它很容易受到选择的明文攻击——但在这两种说法旁边都有一个“需要引用”,我不确定这是否适用于分组密码。我真的可以使用一个计数器来计算使用给定 AES 密钥发送的数据包数量(与 128 位块数量的计数器分开)吗?从 1 开始?显然,这将使随机数可预测。考虑到 GCM 会进行身份验证和加密,这会损害其身份验证功能吗?
java - 需要支持 1 位反馈密码模式的 3-DES 密码库
我在 1 位流模式下找不到支持 CFB、OFB 或 CBC 模式的 java 库。
到目前为止,我尝试过的库(BouncyCastle 和 IAIK)仅支持 8-64 范围。