Salsa20

title: 结构.
content: 在其内部,该算法采用模加⊕(逻辑异或),32位模加2 ⊞,和在一个内部十六个32位word的state上进行恒定距离循环移位操作(«<)。只使用add-rotate-xor操作避免了软件实现中计时攻击的可能性。基本的Salsa20循环函数 codice_1是 初始状态是根据密钥的8个word、流位置的2个word、nonce的两个word(基本上是额外的流位置)和4个固定word制成。20轮循环混合制成16个word的流密码输出。  一个quarter-round会使用四个word的输入并制成四个word的输出。内部的16-word状态被布置为一个4x4矩阵;偶数循环应用quarter-round操作到四行的每项,奇数循环应用quarter-round操作到四列的每项。连续两轮循环(一次行循环和一次列循环)被称为double-round。  更精确的规范已在下方呈现为伪代码,尽管这种行/列模式更难看出⊞是模加2,«<是左旋操作,及⊕是异或。codice_2是codice_3的缩写。 Salsa20在其输入上实行20轮混合,然后添加最终数组到原数数组来获得64字节输出块。但是,使用8轮和12轮的缩减循环的变体Salsa20/8和Salsa20/12也已分别被引入。这些变体被引入以补充原有的Salsa20,但不是取代它,甚至在eSTREAM的基准测量中比Salsa20表现更好,尽管它相应有着较低的安全余量。
title: eSTREAM选用.
content: Salsa20已被选择作为eSTREAM项目“Profile 1”(软件)的第三阶段设计,其在第二阶段结束时得到了Profile 1中算法中的最高投票得分。 Salsa20先前被选择为Profile 1(软件)的第二阶段设计重点,并作为eSTREAM项目Profile 2(硬件)的第二阶段,但最终没有晋级到“Profile 2”的第三阶段,因为eSTREAM觉得这对于极其资源受限的硬件环境可能不是一个好的候选。
title: 密码分析.
content: 截至2015年,没有已知的对Salsa20/12或完整Salsa20/20的攻击被发布;已知的最佳攻击是打破12轮或20轮循环中的8轮。  在2005年,Paul Crowley报告了一个对Salsa20/5的攻击,预计时间复杂度2,并赢得Bernstein的1000美金 “最有趣Salsa20密码分析”奖励。此次攻击及所有后续的攻击都是基于截断差分分析。在2006年,Fischer、Meier、Berbain、Biasse和Robshaw报告了一个对Salsa20/6的攻击,预计时间复杂度2,以及一个对Salsa20/7的相关密钥攻击,预计时间复杂度2。  在2007年,Tsunoo 等人公布了一个Salsa20的密码分析,在2次操作中,使用2对密钥流,打破8/20轮来恢复256位的私钥。但是,这种攻击似乎没有比蛮力攻击更好。  在2008年,Aumasson、Fischer、Khazaei、Meier和Rechberger报告了一个追对Salsa20/7的密码分析攻击,时间复杂度2,并且他们报告了首个对Salsa20/8用预计时间复杂度2的攻击。此攻击使用了对中性密钥位进行截断差分概率检测的新概念。此攻击可以打破使用128位密钥的Salsa20/7。  在2012年,Aumasson 等人的攻击使Shi 等人将Salsa20/7(128位密钥,时间复杂度2)改进为Salsa20/8(256位密钥,时间复杂度2)。  在2013年,Mouha和Preneel发布了一则证明,叙述使用15轮循环的Salsa20在128位的安全差分分析。具体来说,它没有比2更高概率的差分特征,因此差分分析会比用尽128位密钥更困难。
title: ChaCha变种.
content: 在2008年,丹尼尔·J·伯恩斯坦发布了一个密切相关的“ChaCha”密码家族,其目的是增加每一轮的扩散以实现相同或稍微提升的性能。 Aumasson et al. paper也攻击过ChaCha,实现了少一轮循环:256位ChaCha6有复杂性2,ChaCha7有复杂性2。128位ChaCha6在2以内,但据称攻击128位的ChaCha7失败。  ChaCha替换了基本的Salsa20循环函数codice_1 修改后的计算方法: 循环移位量也被更新。一个完整的quarter-round,codice_5变为: 这除了使其在双操作数指令集(如x86)上更有效率,也使其在每次quarter-round中更新每个word两次。  在事实上,8轮的两次循环允许一些优化。此外,输入格式可以被重新布置,以支持高效的SSE实现优化,这对Salsa20已被发现。相比逐行、逐列下移置换,还可以沿对角线进行。这样ChaCha中的两轮循环是: 其中的数字是十六个32位state word。ChaCha20使用两轮10次迭代。  ChaCha是BLAKE哈希算法的基础,NIST哈希算法竞争的一个入围者,并且继任者BLAKE2调整为更高的速度。它还定义了一个使用16个64位word(state的1024位)的变种,具有相应调整的循环移位常数。
title: ChaCha20.
content: Google选择了伯恩斯坦设计的,带Poly1305讯息鉴别码的ChaCha20(即ChaCha20-Poly1305),作为OpenSSL中RC4的替代品,用以完成互联网的安全通信。Google最初实现了HTTPS (TLS/SSL)流量在Chrome浏览器(Android手机版)与Google网站之间的通信。  不久之后,Google在TLS中采用它,ChaCha20-Poly1305算法也以chacha20-poly1305@openssh.com成为OpenSSH中的一个新密码套件。后来,通过编译时选项避免它依赖于OpenSSL也成为可能。  ChaCha20也被用在OpenBSD和NetBSD操作系统中的arc4random随机数生成器,取代已经脆弱的RC4,在DragonFly BSD中内核的CSPRNG子程序中也是如此。  ChaCha20已经在中标准化。它在IKE和IPsec中的使用已在中标准化。在中,ChaCha20-Poly1305已经被加入TLS扩展标准。  若CPU或软件不支援AES指令集,ChaCha20可提供比AES更好的效能。在ARM处理器上,ChaCha20比ARM更省电。  WireGuard协定使用了带Poly1305讯息鉴别码的ChaCha20。

Summary: Salsa20是一种流加密算法,由丹尼尔·J·伯恩斯坦提交到eSTREAM。它建立在基于add-rotate-xor(ARX)操作的伪随机函数之上——32位模加、异或(XOR)和循环移位操作。Salsa20映射一个256位密钥、一个64位nonce以及一个64位流位置到一个512位的输出(也存在一个128位密钥的版本)。这使Salsa20具有了不同寻常的优势,用户可以在恒定时间内寻求输出流中的任何位置。它可以在现代x86处理器中提供约每4–14次循环周期一字节的速度,并具有合理的硬件性能。它没有注册专利,并且Bernstein还撰写了几篇对常见架构优化的公有领域实现。

Salsa20: Salsa20 je proudová šifra publikovaná v roce 2005 Danielem J. Bernsteinem. Její pozměněná verze Salsa20 o dvanácti rundách místo dvaceti se úspěšně účastnila jako jeden z kandidátů projektu ESTREAM. Základem této proudové šifry je pseudonáhodná funkce, která přijímá na vstupu klíč o velikosti 256 bitů a jednorázovou hodnotu o velikosti 64 bitů. Dále je nezvykle vstupem ještě 64bitový index, kterým je určeno, který z výstupním 512bitových pseudonáhodných bloků má být vrácen. Číslo 20 ve jménu šifry odkazuje k základnímu počtu vnitřních rund.