[译] 椭圆曲线密码学: 安全强度及对比RSA

本文翻译自爱尔兰AWS工程师 ANDREA CORBELLINI 关于椭圆曲线密码学四篇博客中的最后一篇, 原文采用 CC-BY 4.0 协议 进行授权 原文链接 : https://andrea.corbellini.name/2015/06/08/elliptic-curve-cryptography-breaking-security-and-a-comparison-with-rsa/ 原作者: ANDREA CORBELLINI 译者: chxj1992 本文是 ECC:入门 系列文章的第四篇也是最后一篇. 在上一篇文章中我们学习了两种算法: ECDH 和 ECDSA, 并且了解到了椭圆曲线上的离散对数难题在保证算法安全性上扮演的重要角色. 但是如果你还没忘的话, 我们并没有对离散对数难题的复杂性在数学上的证明: 我们相信它是"困难的", 但是我们还不能肯定. 在本文的第一个部分中, 我们将试着去了解在今天的技术条件下要解决它到底有多"难". 然后在第二个部分里, 我们将尝试解答以下问题: 既然已经有了 RSA 为什么我们需要椭圆曲线加密.…

[译] 椭圆曲线密码学: 有限域和离散对数

本文翻译自爱尔兰AWS工程师 ANDREA CORBELLINI 关于椭圆曲线密码学四篇博客中的第二篇, 原文采用 CC-BY 4.0 协议 进行授权 原文链接 : https://andrea.corbellini.name/2015/05/23/elliptic-curve-cryptography-finite-fields-and-discrete-logarithms/ 原作者: ANDREA CORBELLINI 译者: chxj1992 这篇文章是椭圆曲线密码学:入门系列文章的第二篇. 在前一篇文章中, 我们知道了如何在实数域上的椭圆曲线上定义一个群. 具体来说, 我们定义了点加的规则: 找到位于一条直线上的三个点, 三点之和为零($P + Q + R = 0$). 我们推导了求解点加的几何方法与代数方法. 我们还介绍了标量乘法($nP = P + P + \cdots + P$) 并且我们找到了一种用于计算标量乘法的"简单"算法: 倍加法. 现在我们将要把椭圆曲线限制在有限域而非所有实数的集合上,…

[译] 椭圆曲线密码学: 入门

本文翻译自爱尔兰AWS工程师 ANDREA CORBELLINI 关于椭圆曲线密码学四篇博客中的第一篇, 原文采用 CC-BY 4.0 协议 进行授权 原文链接 : https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/ 原作者: ANDREA CORBELLINI 译者: chxj1992 如果你们知道什么是椭圆曲线密码学, 那你们应该也听说过 ECC, ECD或者ECDSA. ECC是椭圆曲线密码学(Elliptic Curve Cryptography)的首字母缩写, 而另外两个都是基于ECC实现的算法. 如今, 我们在 TLS, PGP 和 SSH 里都能找到椭圆曲线密码学的身影, 这三种技术可以说是现代互联网和数字世界的基础, 更别提ECC在比特币和其他各种加密货币中发挥的巨大作用了. 在ECC开始流行以前, 绝大多数公钥加密算法都基于 RSA, DSA 和 DH 实现.…

Codewars:从逆波兰表达式到Three-Pass编译器(2)

在这里我想说的第二道题,我把它理解成一次对逆波兰表达式的运用和延伸。关于逆波兰表达式的相关知识,可以在前一篇博客中读到 : Codewars:从逆波兰表达式到Three-Pass编译器(1) 和前一题相比,这道题的题面就要复杂多了。 我们有一种如下的语法规则的编程语言: [ a b ] a*a + b*b 这里我们定义了一个函数,这个函数有两个参数(a 和 b),函数功能是计算 a 和 b 的平方和。 现在,请为该语言实现一个简单的语法编译器。编译过程可以拆分为三个步骤: 1.将函数解析为一个抽象语法树(AST ) AST有如下规则: { 'op': '+', 'a': a, 'b': b } // add subtree a to subtree b { 'op': '-', 'a': a,…

Codewars:从逆波兰表达式到Three-Pass编译器(1)

最近沉迷于在 codewars 上做题无法自拔,其中有两道题我感觉挺有意思,觉得值得记下来,故成此文。 第一道题的题面非常简单,实现一个包含 + - * / 四则运算的计算器,输入样例:1 + 2 * 3, 期望结果 7。 原题链接见下: https://www.codewars.com/kata/calculator 从小学数学的角度来思考这道题,答案是显而易见的:乘除法的优先级要高于加减法,所以我们可以把表达式中所有乘除法先提出来计算出结果并放回原来的位置,再依次计算加减法得到整个表达式的结果。依照这样的思路,我们可以有如下的代码实现(In Python): from operator import add, sub, mul, div FIRST = {'*' : mul, '/': div} SECOND = {'+': add,…