[译] 椭圆曲线密码学: 安全强度及对比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 为什么我们需要椭圆曲线加密.…

[译] 椭圆曲线密码学: ECDH 和 ECDSA

本文翻译自爱尔兰AWS工程师 ANDREA CORBELLINI 关于椭圆曲线密码学四篇博客中的第三篇, 原文采用 CC-BY 4.0 协议 进行授权 原文链接 : https://andrea.corbellini.name/2015/05/30/elliptic-curve-cryptography-ecdh-and-ecdsa/ 原作者: ANDREA CORBELLINI 译者: chxj1992 这篇文章是 ECC:入门 系列文章的第三篇. 在之前的文章中, 我们了解了什么是椭圆曲线以及定义了群律以便对椭圆曲线上的点进行一些数学计算.然后我们将椭圆曲线限定在了以一个质数为模的整数有限域上. 在此限制下, 我们看到了椭圆曲线上的点可以生成出循环子群并且我们还介绍了 基点, 阶 和 余子式 的概念. 最后我们知道, 有限域上的标量乘法计算是一个"容易"的问题, 而离散对数问题却是非常"困难"的. 现在我们将会看到以上这些东西将如何融入密码学中.…

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

本文翻译自爱尔兰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 实现.…

FastJSON IntegerSerializer 潜在DOS攻击风险问题

背景 近日, 慢雾安全平台的白帽子给公司项目提交了一个安全漏洞: 向某个参数类型为Integer的POST接口提交如 1.00...00 (小数点后约100万个0), 服务端程序处理该请求消耗了约90秒的时间, 耗费了大量的计算资源, 对于服务端程序来说, 这是不可接受的, 攻击者可以利用该漏洞对服务器发起DOS攻击 分析 根据白帽子提供的细心我在测试环境对该问题进行了复现并通过JProfiler分析了请求链路, 结果如下 : 可见, 绝大部分的计算资源用在了将数据解析为BigDecimal. 可是为什么参数类型明明是Integer却被解析成了BigDecimal ? 我结合FastJSON源码做了进一步的分析, 发现FastJSON在解析Integer过程中会先判断数据的格式, 如果数据格式是小数, FastJSON会先将数据解析为BigDecimal , 再通过类型转换把BigDecimal转成Integer, 而正是这样的设计导致了这次的问题. 对比同类库Jackson和GSON, 在将相同数据转换成Integer时并没有以上问题. 我认为这可能是FastJSON在设计时考虑不周的一个点 解决方案 a. 在运维层面, 根据接口实际需要对请求参数大小进行限制, 除数据上传等提交数据较大的接口之外外, 将入参数据大小限制在 10K 内 b. 编写自定义Integer解析器替代默认的Integer解析器, 在将格式为小数的数据解析为Integer时, 用Double替代BigDecimal以规避潜在的安全(DOS)风险, 相关代码如下 c. 在涉及到解析用户提交的数据时, 谨慎使用BigDecimal类型, 当确实需要准确精度保证时, 可以考虑先将小数数据转换为String类型, 在校验数据长度后再将数据转为BigDecimal 这次的问题也给我带来了一些的思考:…

V2Ray+Cloudflare搭建"永不被墙"的梯子

之前一直在自己的VPS搭建Shadowsocks服务端做梯子, 不过在一些政治敏感时期, 墙的力度会增强, 前段时间我发现Vultr的所有IP几乎都直接被墙了 经过了解, 决定改用V2Ray搭建一个新的梯子. 我觉得V2Ray最牛逼的一个点是可以将流量伪装成Websocket并通过Cloudflare(CDN)来代理, 而CDN整个被墙掉的概率很低的 ... 建议使用这个项目来搭建V2Ray服务端, 非常好用 速度方面可以接受, Google查个资料, YouTube看个视频基本还是没问题的…

读<跨越千年的RSA算法>

原文链接 跨越千年的RSA算法 在当今这个由互联网构筑的世界里, RSA算法几乎无处不在. 例如: 访问任何一个https证书加密的网站 通过SSH登录一台服务器 从GitHub上clone一个项目 说来惭愧, 作为一个每天和RSA算法打交道的程序员, 直到最近学习了Matrix67大神讲解RSA算法的博客我才终于理解RSA算法到底是怎么一回事. 在真正介绍RSA算法之前作者用了大量的篇幅为读者填补了必要的数学基础, 文章共分为六个小节, 真正提到RSA算法的只有最后一个小节, 我之前也看过一两篇其他介绍RSA算法的文章, 但唯有这一次让我有种豁然开朗的感觉. (一)可公度线段 文章介绍了在<几何原本>中一种求取最大公约数的方法(Euclid 算法): 假设刚开始的两个数是 a 和 b ,其中 a > b ,那么把 a 除以 b 的余数记作 c ,把 b 除以 c 的余数记作 d ,c 除以 d 余 e…

理解浮点数

说到理解浮点数, 最著名的一个问题莫过于 0.1 + 0.2 = ? 答案似乎显而易见, 运行python交互式终端, 键入算式按下回车, 结果如下 等等,这似乎并不是我们期待的答案! 要理解这个奇怪的现象,我们就必须从什么是浮点数说起 ... 浮点数的存储 以double类型的浮点数为例,数据在内存中由如下三个部分组成: 符号位S:第 1 位是正负数符号位(sign),0代表正数,1代表负数 指数位E:中间的 11 位存储指数(exponent),用来表示次方数 尾数位M:最后的 52 位是尾数(mantissa),首位的始终为1, 在存储时省略, 超出的部分自动进一舍零 如 4.5 转换成二进制就是 100.1,科学计数法表示是 1.001*2^2,舍去1后…

RocketMQ broker单点宕机导致部分Topic无法发送问题分析

背景 项目生产环境的RocketMQ采用双主双从的架构, 期望达到不丢消息且高可用的目的. 而在实际的生产场景中, 我们却遭遇了当一台broker因内存不足导致java进程终止后, 部分topic消息无法正常发送的问题. 现象和预期不相符, 针对这一问题, 我们对RocketMQ相关部分的设计原理进行了更深入的研究. 设计分析 根据以上状态图可知, Producer 第一次发送会根据 AUTO_CREATE_TOPIC_KEY(TBW102) 从 NameServer 拿到 topicRouteData 作为新创建 topic 的 topicRouteData,而 Producer 中的 MQClientInstance 每30s会从 NameServer 拉取 topic 的 topicRouteData 最新信息并更新到本地内存。 异常情况1 Producer 发送一条信息后关闭掉 Producer,这个时候只有在一个 broker 上面有 topic 信息,下一次启动 Producer 发送消息的时候就会直接从 NameServer…

夏令时的困惑

对于像我一样一直生活在中国的年轻人来说, 夏令时也许是比较一个陌生的概念. 那么, 夏令时到底是什么呢? 答: 夏令时是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮较早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。 据称最早有夏时制构思的是美国著名政治家、科学家本杰明·富兰克林,他在任美国驻法国大使期间,觉得法国人晚起晚睡的生活习惯浪费了大好的阳光,建议他们早睡早起,这样每年可以节约6千4百万磅蜡烛。夏时制在英语里就是“节约阳光时间”的意思。 到1907年,英国建筑师威廉·维莱特正式向英国议会提出夏时制的构思,主要是为了节省能源和提供更多的时间用来训练士兵. 第一次世界大战期间,德国首先实行夏时制,英国因为怕德国会从中得到更大的效益,因此紧跟着也采取了夏时制,夏时制节省了约15%的煤气和电力,而法国不久也效仿实行。 1942年,第二次世界大战期间,美国又再度实行夏时制,1945年战争结束后取消。1966年,美国重新实行夏时制。欧洲大部分国家从1976年,即第四次中东战争导致首次石油危机(1973年)三年后开始实行夏时制。 1986年至1991年,中华人民共和国在全国范围实行了六年夏时制,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)…