百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

数字证书签名、Lets Encrypt和证书劫持

lipiwang 2024-10-20 10:10 9 浏览 0 评论

现在安全体系中,最重要的一部分是数字安全加密体系,包括数字内容的加密解密,数字签名和验证。本文虫虫给大家介绍一下数字证书签名以及世界最大的网站Https免费签名Let's Encrypts,及数字证书签名的安全性等问题。

概述

数字签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做不可逆的哈希计算得到一个哈希值。在把信息发送出去时,把这个哈希值加密后做为一个签名和信息一起发出去。接收方在收到信息后,会重新计算信息的哈希值,并和信息所附带的哈希值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过。数字签名在现在现代安全体系中非常重要基础,可以用来确保文件的完整性、防止文件篡改以及身份认证等。首先我们说说几个常见的数字证书基本概念:

RFC

RFC的意思是Request For Comments,中文对应为请求注释,它是一堆描述不同协议的文本文件。如果想了解SSL,TLS(新的SSL)和x509证书(用于SSL和TLS的证书)如何工作,例如,想编写自己的OpenSSL,则必须阅读相应的TLS RFC。:的X509证书对应的rfc5280和TLS(1.2)对应的rfc5246。


x509

x509是为非正式的互联网电子邮件,IPsec和WWW应用程序定义的证书规范,x509发展了三个版本,现在广泛使用的RFC v3,其结构如下:

Certificate ::= SEQUENCE {

tbsCertificate TBSCertificate,

signatureAlgorithm AlgorithmIdentifier,

signatureValue BIT STRING }

这些是ASN.1结构。现代的证书就是这样的:

第一个对象包含将要签名的所有感兴趣的内容,因此我们将其称为"待签名证书"

第二个对象包含CA用于对该证书签名的签名类型(例如:sha256)

最后一个对象不是对象,只是与DER编码后的TBSCertificate 签名相对应的一些位

ASN.1

它看起来很小,但是每个对象都有一定深度。

TBSCertificate是最大的TBSCertificate,包含一堆有关客户端,CA,客户端的公钥等信息。

DER

当然不会像这样发送证书。而使用DER将其编码为二进制格式。

每个字段名都会被忽略,如果我们证书的形成方式,那么将不可能理解每个值的含义。

每个值都编码为TLV三元组:[TAG,LENGTH,VALUE]

例如,查看Github的证书

右边是DER编码证书的十六进制转储,左边是ASN.1格式的译文。

如上面所见,如果没有RFC,我们真的不知道每个值对应什么。openssl工具中自带了很方面的命令行工具,可以用来解析证书的内容。简单使用openssl x509验证即可:

openssl x509 -in cert.pem -noout -text

Let's Encrypt数字签名

说到数字签名就不能不对Let's Encrypt竖起大拇指,可以说它以一己之力为整个互联网网站撑起了HTTPS的天。Let's Encrypt成立于2014年,是一家非盈利性的认证机构,目前为约2亿个网站提供了数字证书认证,累积签发了10亿张的证书。

Let's Encrypt成功的关键取决于两点:

它是免费的。Let's Encrypt之前,大多数证书颁发机构向要获得证书的网站管理员收取费用。

Let's Encrypt证书和商业证书的区别:



它是自动化的。如果遵循其标准化协议,则可以通过API请求,续订甚至吊销证书。与此形成对比的是其他证书机构需要手动处理并需要一些时间来颁发证书。

如果网站管理员希望网站example-com(通过HTTPS)向用户提供安全的连接,则可以向Let's Encrypt发出申请证书,并在证明自己拥有域example-com并颁发证书后,便可以使用该证书来与任何信任"Let's Encrypt"的浏览器协商安全连接。

这个实际流程如下:

1、Alice使用RSA公钥在Let's Encrypt中注册。

2、Alice要求Let's Encrypt证书example-com。

3、Let's Encrypt让Alice证明自己是example-com所有者,需要签发一些数据并将其上传到example-com/.well-known/acme-challenge/some_file。

4、爱丽丝签署并上传签名后,要求Let's Encrypt其进行检查。

5、Let's Encrypt检查是否可以访问上的文件example-com,如果它成功下载了签名并且签名有效,则Let's Encrypt向Alice颁发证书。

这个过程的流程图如下:

数字证书劫持

那么,我们假设Alice并不会实际拥有example-com,但是她通过中间劫持的方法实现了步骤5中进行加密。自从Let's Encrypt推出以来,这一直是个问题。事实上普林斯顿大学的一组研究人员在Bamboozling证书颁发机构的BGP中证明了这一点:他们执行了一个真实的BGP攻击演示,以合乎道德的方式从顶级CA获得虚假证书。为了评估PKI的脆弱性,研究人员收集了180万个证书的数据集,发现这些数据集中绝大多数域都可以成功伪造证书。

该论文中,研究人员提出了两种解决方案,以进行补救,或至少降低这些针对KPI攻击的风险:

CA机构从多个有利位置对域名进行验证,以使其难以发起成功的攻击;

CA机构通过BGP监视系统,检测可疑BGP路由并延迟证书验证使网络运营商有时间对BGP攻击做出反应。

最近Let's Encrypt实现了第一个解决方案:多角度域验证。该方法改变了上述流程的第5步:在新的策略下Let's Encrypt会从多个位置下载域名的证书验证。

Let's Encrypt攻击的工作原理

安德鲁·艾耶(Andrew Ayer)在2015年发现了对Let's Encrypt的攻击。在其中,Andrew提出了一种方法来控制已经验证了域的Let's Encrypt帐户(例如example-com)

攻击是这样的:

Alice通过在example-com上的一些数据上载签名(example-com/.well-known/acme-challenge/some_file) 来注册并完成域验证。然后,成功地从Let's Encrypt获得证书。

之后Eve使用新帐户和新的RSA公钥签署了Let's Encrypt,并请求恢复example-com域

Let's Encrypt要求Eve签发一些新数据,并将其上传到example-com/.well-known/acme-challenge/some_file。

Eve制作了一个新的假冒密钥对,并在Let's Encrypt上更新了其公共密钥。然后,她要求Let's Encrypt以检查签名。

Let's Encrypt从example-com获取签名文件,签名匹配,于是Eve被授予example-com域所有权。

攻击的图示如下:

在上述攻击中,Eve设法创建了一个有效的公钥,该公钥验证了给定的签名和消息。数字签名不能唯一地标识密钥或消息

根据RSA的工作原理(这是现代证书交换链的基础):

对于固定签名signature和(PKCS#1 v1.5)消息message,公钥(e,N)必须满足以下方程式以验证签名:

一个人可以很容易地制作一个(大部分时间)满足以下等式的公钥:

可以轻松验证验证是否有效:

根据定义,最后一行是正确的。

数字签名的安全性

由于理论领域与应用领域之间安全性证明与已实施协议之间存在差距。密码学中的签名通常使用EUF-CMA模型进行分析,该模型代表自适应选择消息攻击下的存在不可伪造性。

通过模型中,生成了一个密钥对,然后要求签署一些任意消息。在观察签署的签名时,如果可以在某个时间点对未请求的消息产生有效的签名,将获胜。

不幸的是,尽管现代签名方案似乎通过了EUF-CMA测试,但它们往往表现出一些令人惊讶的特性。论文《Automated Analysis of Subtle Attacks on Protocols that Use Signatures》中Dennis Jackson,Cas Cremers,Katriel Cohn-Gordon和Ralf Sasse试图对使用签名的协议进行细微的攻击的自动化分析,试图列出这些令人惊讶的特性以及受它们影响的签名方案(然后找到一堆)在使用正式验证的协议。

保守的排他性(CEO)/破坏性的排他性(DEO)

密钥替换攻击(CEO),其中使用不同的密钥对或公钥来验证给定消息上的给定签名。

消息密钥替换攻击(DEO),其中使用不同的密钥对或公共密钥来验证新消息上的给定签名。

可延展性。大多数签名方案都是可塑的,这意味着如果给出一个有效的签名,就可以对其进行篡改,以使其成为一个不同但仍然有效的签名。请注意,如果我是签名人,通常可以为同一条消息创建不同的签名。不清楚这是否会对任何现实世界的协议产生影响,尽管比特币MtGox交易所将其资金损失归咎于该协议,2014年2月,曾经是最大的比特币交易所MtGox关闭并申请破产,声称攻击者利用可塑性攻击来耗尽其帐户。

请注意,一种新的安全模型SUF-CMA(用于强EUF-CMA)试图将这种行为包含在签名方案的安全定义中,并且一些最新标准(如RFC 8032指定Ed25519)正在缓解对其签名方案的延展性攻击。 。

可重新签名。这很容易解释。要验证消息上的签名,通常不需要消息本身,但需要摘要。这样,任何人都可以使用自己的密钥重新签名消息,而无需知道消息本身

可碰撞性。有些方案允许制作签名,这些签名将在几条消息下进行验证。更糟糕的是,按设计Ed25519允许人们制作公钥和签名,从而很有可能验证任何消息。(在某些实现中,例如libsodium,此问题已修复。)

下图中概括了证书替代攻击:

最后,好的签名方案会将有有效的安全的方法都会累积完善起来,所以在使用时候选择主要的方法一般是没有问题。而如果你要重复造轮子,要自己实现一套更为复杂的加密协议,则需要考虑这些问题。

相关推荐

前端入门——css 网格轨道详细介绍

上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...

Islands Architecture(孤岛架构)在携程新版首页的实践

一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...

HTML中script标签中的那些属性

HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...

CSS 中各种居中你真的玩明白了么

页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...

CSS样式更改——列表、表格和轮廓

上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...

一文吃透 CSS Flex 布局

原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...

css实现多行文本的展开收起

背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...

css 垂直居中的几种实现方式

前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...

WordPress固定链接设置

WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...

面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿

前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...

3种CSS清除浮动的方法

今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...

2025 年 CSS 终于要支持强大的自定义函数了?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...

css3属性(transform)的一个css3动画小应用

闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...

CSS基础知识(七)CSS背景

一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...

CSS 水平居中方式二

<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...

取消回复欢迎 发表评论: