【笔记】密码学与安全技术概要总结(二)

【笔记】密码学与安全技术概要总结(一)

四、数字证书

  对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。理论上任何人可以公开获取到对方的公钥。然而这个公钥有没有可能是伪造的呢?传输过程中有没有可能被篡改掉呢?一旦公钥自身出了问题,则整个建立在其上的安全体系的安全性将不复存在。

  数字证书机制正是为了解决这个问题,它就像日常生活中的一个证书一样,可以证明所记录信息的合法性。比如证明某个公钥是某个实体(如组织或个人)的,并且确保一旦内容被篡改能被探测出来,从而实现对用户公钥的安全分发

  根据所保护公钥的用途,可以分为加密数字证书(Encryption Certificate)签名验证数字证书(Signature Certificate)前者往往用于保护用于加密信息的公钥;后者则保护用于进行解密签名进行身份验证的公钥。两种类型的公钥也可以同时放在同一证书中。

  一般情况下,证书需要由证书认证机构(Certification Authority,CA)来进行签发和背书。权威的证书认证机构包括DigiCert、GlobalSign、VeriSign等。用户也可以自行搭建本地CA系统,在私有网络中进行使用。

1. X.509证书规范

  一般来说,一个数字证书内容可能包括基本数据(版本、序列号)、所签名对象信息(签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA的数字签名,等等。

  目前使用最广泛的标准为ITU和ISO联合制定的X.509的v3版本规范(RFC 5280),其中定义了如下证书信息域:

  • 版本号(Version Number):规范的版本号,目前为版本3,值为0x2;

  • 序列号(Serial Number):由CA维护的为它所颁发的每个证书分配的唯一的序列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书,最大不能超过20个字节;

  • 签名算法(Signature Algorithm):数字签名所采用的算法,如sha256WithRSAEncryption或ecdsa-with-SHA256;

    扫描二维码关注公众号,回复: 9322412 查看本文章
  • 颁发者(Issuer):颁发证书单位的标识信息,如“C=CN,ST=Beijing,L=Beijing,O=org.example.com,CN=ca.org.example.com”;

  • 有效期(Validity):证书的有效期限,包括起止时间;

  • 主体(Subject):证书拥有者的标识信息(Distinguished Name),如“C=CN,ST=Beijing,L=Beijing,CN=person.org.example.com”;

  • 主体的公钥信息(Subject Public Key Info):所保护的公钥相关的信息;

  • 公钥算法(Public Key Algorithm):公钥采用的算法;

  • 主体公钥(Subject Public Key):公钥的内容;

  • 颁发者唯一号(Issuer Unique Identifier):代表颁发者的唯一信息,仅2、3版本支持,可选;

  • 主体唯一号(Subject Unique Identifier):代表拥有证书实体的唯一信息,仅2、3版本支持,可选;

  • 扩展(Extensions,可选):可选的一些扩展。v3中可能包括:

  • Subject Key Identifier:实体的密钥标识符,区分实体的多对密钥;

  • Basic Constraints:一般指明是否属于CA;

  • Authority Key Identifier:证书颁发者的公钥标识符;

  • CRL Distribution Points:撤销文件的发布地址;

  • Key Usage:证书的用途或功能信息。

  此外,证书的颁发者还需要对证书内容利用自己的公钥添加签名,以防止别人对证书内容进行篡改。

2.证书格式

  X.509规范中一般推荐使用PEM(Privacy Enhanced Mail)格式来存储证书相关的文件。证书文件的文件名后缀一般为.crt或.cer,对应私钥文件的文件名后缀一般为.key,证书请求文件的文件名后缀为.csr。有时候也统一用.pem作为文件名后缀。

  PEM格式采用文本方式进行存储,一般包括首尾标记和内容块,内容块采用Base64进行编码

  此外,还有DER(Distinguished Encoding Rules)格式,是采用二进制对证书进行保存,可以与PEM格式互相转换。

3.证书信任链

  证书中记录了大量信息,其中最重要的包括“签发的公开密钥”和“CA数字签名”两个信息。因此,只要使用CA的公钥再次对这个证书进行签名比对,就能证明某个实体的公钥是否是合法的。

  实际上,要想知道CA的公钥是否合法,一方面可以通过更上层的CA颁发的证书来进行认证;另一方面某些根CA(Root CA)可以通过预先分发证书来实现信任基础。 例如,主流操作系统和浏览器里面,往往会提前预置一些权威CA的证书(通过自身的私钥签名,系统承认这些是合法的证书)。之后所有基于这些CA认证过的中间层CA(Intermediate CA)和后继CA都会被验证合法。这样就从预先信任的根证书,经过中间层证书,到最底下的实体证书,构成一条完整的证书信任链

  另外,当信任链上任一证书不可靠时,则依赖它的所有后继证书都将失去保障。

五、PKI体系

  安全地管理和分发证书可以遵循PKI(Public Key Infrastructure)体系来完成。PKI体系核心解决的是证书生命周期相关的认证和管理问题。

  PKI是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架,并不代表某个特定的密码学技术和流程。

  实现了PKI规范的平台可以安全可靠地管理网络中用户的密钥和证书。目前包括多个实现和规范,知名的有RSA公司的PKCS(Public Key Cryptography Standards)标准X.509相关规范等。

1.PKI基本组件

  一般情况下,PKI至少包括如下核心组件:

  • CA(Certification Authority):负责证书的颁发和作废,接收来自RA的请求,是最核心的部分;
  • RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA;
  • 证书数据库:存放证书,多采用X.500系列标准格式。可以配合LDAP目录服务管理用户信息。

  其中,CA是最核心的组件,主要完成对证书信息的维护

  常见的操作流程:用户通过RA登记申请证书,提供身份和认证信息等;CA审核后完成证书的制造,颁发给用户。用户如果需要撤销证书则需要再次向CA发出申请。

2.证书的签发

  CA对用户签发证书实际上是对某个用户公钥,使用CA的私钥对其进行签名。这样任何人都可以用CA的公钥对该证书进行合法性验证。验证成功则认可该证书中所提供的用户公钥内容,实现用户公钥的安全分发。

  用户证书的签发可以有两种方式:一般可以由CA直接来生成证书(内含公钥)和对应的私钥发给用户;也可以由用户自己生成公钥和私钥,然后由CA来对公钥内容进行签名。

  后者情况下,用户一般会首先自行生成一个私钥和证书申请文件(Certificate Signing Request,即csr文件),该文件中包括了用户对应的公钥和一些基本信息,如通用名(common name,即cn)、组织信息、地理位置等。CA只需要对证书请求文件进行签名,生成证书文件,颁发给用户即可。整个过程中,用户可以保持私钥信息的私密性,不会被其他方获知(包括CA方)。

  生成证书申请文件的过程并不复杂,用户可以很容易地使用开源软件openssl来生成csr文件和对应的私钥文件。

  安装OpenSSL后可以执行如下命令来生成私钥和对应的证书请求文件。生成过程中需要输入地理位置、组织、通用名等信息。生成的私钥和csr文件默认以PEM格式存储,内容为Base64编码。

$ openssl req -new -keyout private.key -out for_request.csr

  使用如下命令可以查看生成的csr文件的明文:

$ openssl req -in for_request.csr -noout -text

  注:用户自行生成私钥情况下,私钥文件一旦丢失,CA方由于不持有私钥信息,无法进行恢复,意味着通过该证书中公钥加密的内容将无法被解密。

3.证书的撤销

  证书超出有效期后会作废,用户也可以主动向CA申请撤销某证书文件。

  由于CA无法强制收回已经颁发出去的数字证书,因此为了实现证书的作废,往往还需要维护一个撤销证书列表(Certificate Revocation List,CRL),用于记录已经撤销的证书序号

  因此,通常情况下,当第三方对某个证书进行验证时,需要首先检查该证书是否在撤销列表中。如果存在,则该证书无法通过验证。如果不在,则继续进行后续的证书验证过程。

六、Merkle树结构

  Merkle(默克尔)树,又叫哈希树,是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成。 在区块链系统出现之前,广泛用于文件系统和P2P系统中

在这里插入图片描述
  其主要特点为:

  • 最下面的叶结点包含存储数据或其哈希值;
  • 非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值。

  默克尔树可以推广到多叉树的情形,此时非叶子节点的内容为它所有的孩子节点内容的哈希值

  默克尔树逐层记录哈希值的特点,让它具有了一些独特的性质。 例如,底层数据的任何变动,都会传递到其父节点,一层层沿着路径一直到树根。这意味树根的值实际上代表了对底层所有数据的“数字摘要”。

  目前,默克尔树的典型应用场景有很多,下面分别介绍。

1.快速比较大量数据

  对每组数据排序后构建默克尔树结构。当两个默克尔树根相同时,则意味着两组数据必然相同。否则,必然存在不同。

  由于Hash计算的过程可以十分快速,预处理可以在短时间内完成。利用默克尔树结构能带来巨大的比较性能优势。

2.快速定位修改

  例如上图中,如果D1中数据被修改,会影响到N1、N4和Root。

  因此,一旦发现某个节点如Root的数值发生变化,沿着Root→N4→N1,最多通过O(logn)时间即可快速定位到实际发生改变的数据块D1。

3.零知识证明

  仍以上图为例,如何向他人证明拥有的某组数据(D0……D3)中包括给定某个内容D0而不暴露其他任何内容。

  构造如上图所示的一个默克尔树,公布N1、N5、Root。D0拥有者通过验证生成的Root是否跟提供的值一致,即可很容易检测D0存在。整个过程中验证者无法获知其他内容。

七、布隆过滤器

  布隆过滤器是一种基于Hash的高效查找结构,能够快速(常数时间内)回答“某个元素是否在一个集合内”的问题。

  布隆过滤器因为其高效性大量应用于网络和安全领域,例如信息检索(BigTable和HBase)、垃圾邮件规则、注册管理等。

1.基于Hash的快速查找

  Hash可以将任意内容映射到一个固定长度的字符串,而且不同内容映射到相同串的概率很低。因此,这就构成了一个很好的“内容→索引”的生成关系。如果给定一个内容和存储数组,通过构造Hash函数,让映射后的Hash值总不超过数组的大小,则可以实现快速的基于内容的查找。如果需要快速查找任意内容,只需要将其在常数时间内计算Hash值,并用Hash值查看系统中对应元素即可,该系统“完美地”实现了常数时间内的查找。

  然而,当映射后的值限制在一定范围(如总数组的大小)内时,会发现Hash冲突的概率会变高,而且范围越小,冲突概率越大。 为了提高空间利用率,后来人们基于Hash算法的思想设计出了布隆过滤器结构

2.更高效的布隆过滤器

  布隆过滤器采用了多个Hash函数来提高空间利用率。 对同一个给定输入来说,多个Hash函数计算出多个地址,分别在位串的这些地址上标记为1。进行查找时,进行同样的计算过程,并查看对应元素,如果都为1,则说明较大概率是存在该输入。

  布隆过滤器相对单个Hash算法查找,大大提高了空间利用率,可以使用较少的空间来表示较大集合的存在关系。

  无论是Hash算法,还是布隆过滤器,基本思想是一致的,都是基于内容的编址。Hash函数存在冲突,布隆过滤器也存在冲突。这就造成了两种方法都存在着误报(false positive)的情况,但绝对不会漏报(false negative)

  布隆过滤器在应用中误报率往往很低,例如,在使用7个不同Hash函数的情况下,记录100万个数据,采用2 MB大小的位串,整体的误判率将低于1%。而传统的Hash查找算法的误报率将接近10%。

八、同态加密

1.定义

  同态加密(homomorphic encryption)是一种特殊的加密方法,允许对密文进行处理得到仍然是加密的结果。即对密文直接进行处理,跟对明文进行处理后再对处理结果加密,得到的结果相同。从抽象代数的角度讲,保持了同态性。

  同态加密可以保证实现处理者无法访问到数据自身的信息

  如果定义一个运算符Δ,对加密算法E和解密算法D,满足:

E X Δ Y = E X Δ E Y E(XΔY)=E(X)ΔE(Y)

  则意味着对于该运算满足同态性。

  同态性一般包括四种类型:加法同态、乘法同态、减法同态和除法同态。
  同时满足加法同态和乘法同态,则意味着是代数同态,称为全同态(full homomorphic)。
  同时满足四种同态性,则称为算数同态。

  对于计算机操作来讲,实现了全同态意味着对于所有处理都可以实现同态性。只能实现部分特定操作的同态性,称为特定同态(somewhat homomorphic)

2.问题与挑战

  仅满足加法同态的算法包括Paillier和Benaloh算法;仅满足乘法同态的算法包括RSA和ElGamal算法。

  同态加密在云计算和大数据的时代意义十分重大。目前,虽然云计算带来了包括低成本、高性能和便捷性等优势,但从安全角度讲,用户还不敢将敏感信息直接放到第三方云上进行处理。如果有了比较实用的同态加密技术,则大家就可以放心地使用各种云服务了,同时各种数据分析过程也不会泄露用户隐私。加密后的数据在第三方服务处理后得到加密后的结果,这个结果只有用户自身可以进行解密,整个过程第三方平台无法获知任何有效的数据信息。

  另一方面,对于区块链技术,同态加密也是很好的互补。使用同态加密技术,运行在区块链上的智能合约可以处理密文,而无法获知真实数据,极大地提高了隐私安全性。

  目前全同态的加密方案主要包括如下三种类型:

  • 基于理想格(ideal lattice)的方案:Gentry和Halevi在2011年提出的基于理想格的方案可以实现72 bit的安全强度,对应的公钥大小约为2.3 GB,同时刷新密文的处理时间需要几十分钟;
  • 基于整数上近似GCD问题的方案:Dijk等人在2010年提出的方案(及后续方案)采用了更简化的概念模型,可以降低公钥大小至几十MB量级;
  • 基于带扰动学习(Learning With Errors,LWE)问题的方案:Brakerski和Vaikuntanathan等在2011年左右提出了相关方案;Lopez-Alt A等在2012年设计出多密钥全同态加密方案,接近实时多方安全计算的需求。

  目前,已知的同态加密技术往往需要较高的计算时间或存储成本,相比传统加密算法的性能和强度还有差距。

3.函数加密

  同态加密保护的是数据本身,而函数加密保护的是处理函数本身,即让第三方看不到处理过程的前提下,对数据进行处理。

  该问题已被证明不存在对多个通用函数的任意多密钥的方案,目前仅能做到对某个特定函数的一个密钥的方案。

九、其他问题

1.零知识证明

  零知识证明(zero knowledge proof)是这样的一个过程,证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。

  例如,Alice向Bob证明自己知道某个数字,在证明过程中Bob可以按照某个顺序提出问题(比如数字加上某些随机数后的变换)由Alice回答,并通过回答确信Alice较大概率确实知道某数字。证明过程中,Bob除了知道Alice确实知道该数字外,自己无法获知或推理出任何额外信息(包括该数字本身),也无法用Alice的证明去向别人证明(Alice如果提前猜测出Bob问题的顺序,存在作假的可能性)。

  零知识证明一般认为至少要满足三个条件:

  • 完整性(Completeness):真实的证明可以让验证者成功验证;
  • 可靠性(Soundness):虚假的证明无法让验证者保证通过验证,但允许存在小概率例外;
  • 零知识(Zero-Knowledge):如果得到证明,无法从证明过程中获知除了所证明信息之外的任何信息。

2.量子密码学

  量子密码学(quantum cryptography)随着量子计算和量子通信的研究而受到越来越多的关注,将会对已有的密码学安全机制产生较大的影响。

  量子计算基本原理是利用量子比特可以同时处于多个相干叠加态,理论上可以同时用少量量子比特来表达大量的信息,并同时进行处理,大大提高计算速度。 如1994年提出的基于量子计算的Shor算法,理论上可以实现远超经典计算速度的大数因子分解。这意味着大量加密算法包括RSA、DES、椭圆曲线算法等都将很容易被破解。但量子计算目前离实际可用的通用计算机还有一定距离。

  量子通信则提供对密钥进行安全分发的机制,有望实现无条件安全的“一次性密码”。量子通信基于量子纠缠效应,两个发生纠缠的量子可以进行远距离的实时状态同步。一旦信道被窃听,则通信双方会获知该情况,丢弃此次传输的泄露信息。 该性质十分适合进行大量的密钥分发,如1984年提出的BB84协议,结合量子通道和公开信道,可以实现安全的密钥分发。

  注:一次性密码:最早由香农提出,实现理论上绝对安全的对称加密。其特点为密钥真随机且只使用一次;密钥长度跟明文一致,加密过程为两者进行二进制异或操作。

3.社会工程学

  即便存在理论上完美的技术,也不存在完美的系统。 无数例子证实,看起来设计十分完善的系统最后被攻破,并非是因为设计上出现了深层次的漏洞,而问题往往出在事后看来十分浅显的某些方面。

发布了126 篇原创文章 · 获赞 120 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/cbwem/article/details/104407712