密码学
slug
series-status
status
summary
date
series
type
password
icon
tags
category
密码学
常见的加解密方案可以分为对称加密和非对称加密两大类。以下是一些常见加解密算法及其优缺点
对称加密
对称加密指的是加密和解密使用相同密钥的算法。常见的对称加密算法包括:
a) AES(高级加密标准)
- 优点:加密速度快,安全性高,已被广泛应用于各种场景。
- 缺点:密钥管理复杂,因为需要在通信双方之间安全地传输密钥。
b) DES(数据加密标准)
- 优点:历史悠久,曾经被广泛使用。
- 缺点:密钥长度较短,安全性较低,易受到暴力破解的攻击,已被AES取代。
c) 3DES(三重数据加密算法)
- 优点:比DES安全性更高,可以作为过渡算法使用。
- 缺点:加密速度慢,相较于AES安全性较低。
d) RC4(流加密算法)
- 优点:算法简单,执行速度快。
- 缺点:已被发现存在严重的安全漏洞,不建议在新的应用中使用。
非对称加密
非对称加密指的是加密和解密使用不同密钥的算法,通常使用一对公钥和私钥。常见的非对称加密算法包括:
a) RSA
- 优点:安全性较高,广泛应用于数字签名、数字证书等场景。
- 缺点:加密解密速度较慢,计算量大,不适用于大量数据的加密。
b) ECC(椭圆曲线密码学)
- 优点:短密钥长度下安全性较高,加密解密速度快,适合在资源受限的环境中使用。
- 缺点:椭圆曲线参数的选择对安全性影响较大,需要谨慎选择。
c) ElGamal
- 优点:安全性较高,可用于数字签名和加密。
- 缺点:计算量大,加密解密速度较慢。
d) DSA(数字签名算法)
- 优点:安全性高,主要用于数字签名。
- 缺点:仅支持数字签名,不支持加密。
总的来说,不同的加解密算法在安全性、速度和应用场景方面存在优缺点。在实际应用中,可以根据需求选择合适的加解密方案。通常,对于需要加密大量数据的场景,可以使用对称加密算法,如AES;对于需要确保安全传输的场景,可以使用非对称加密算法,如RSA和ECC。此外,还可以结合使用对称加密和非对称加密来实现更高效和安全的加密解决方案,例如:
- 混合加密 在混合加密中,通信双方使用非对称加密算法(如RSA)来安全地交换对称加密算法(如AES)的密钥,然后使用对称加密算法进行数据加密。这样,即可利用非对称加密的安全性,又可以利用对称加密的高效性。
- 数字签名 数字签名是利用非对称加密算法(如RSA或DSA)对数据生成签名,以确保数据的完整性和来源可信。在这种情况下,发送方使用私钥对数据进行签名,接收方使用对应的公钥进行验证。这样,接收方可以确保数据未被篡改,并确认发送方的身份。
- 密钥协商 密钥协商是指在不直接传输密钥的情况下,通信双方协商生成一个共享密钥。典型的密钥协商算法是Diffie-Hellman(DH)密钥交换。在密钥协商过程中,双方各自生成一对公钥和私钥,然后交换公钥,并利用自己的私钥和对方的公钥计算出相同的共享密钥。这样,即使攻击者截获了双方的公钥,也无法计算出共享密钥。
- 零知识证明 零知识证明是一种加密协议,允许一方向另一方证明某个陈述的真实性,而无需提供关于该陈述的任何其他信息。这种协议在保护隐私和数据安全方面具有很大潜力。典型的零知识证明算法包括zk-SNARKs和Bulletproofs。
在实际应用中,可以根据需求和场景选择合适的加解密方案和协议,以实现既高效又安全的通信。
哈希函数与加密算法
SHA-256(Secure Hash Algorithm 256-bit)和MD5(Message-Digest Algorithm 5)属于哈希函数(Hash Function),而非加密算法。哈希函数将任意长度的输入数据映射到固定长度的输出,通常称为哈希值或摘要。
哈希函数的特点
- 单向性:
- 给定一个输入,可以很容易地计算出对应的哈希值,但从哈希值推导出原始输入是非常困难的。
- 确定性:
- 相同的输入总是产生相同的哈希值。
- 雪崩效应:
- 输入数据的微小变化会导致哈希值的巨大变化,使得两个相近的输入产生截然不同的哈希值。 SHA-256是SHA-2家族的一员,相对于MD5来说,具有更高的安全性。MD5的设计目的是为了数据完整性校验,但由于存在弱点,现已不再推荐使用。
虽然哈希函数与加密算法有一定的相似之处,但它们之间有明显的区别:
- 哈希函数是单向的,而加密算法可以逆向解密恢复原始数据。
- 哈希函数的输出长度是固定的,而加密算法的输出长度通常与输入长度相近。
- 哈希函数主要应用于数据完整性校验、数字签名和密码存储等场景,而加密算法主要用于保护数据的机密性。 因此,SHA-256和MD5属于哈希函数,而不是加解密算法。
数字签名的原理
- 将要签名的文件进行hash计算。
- 用私钥将文件的hash值进行签名。
- 除了签名外,还可以添加时间戳以指示签名时间。
- 将原文件进行hash计算得到hash值。
- 将签名的公钥从签名数据中计算出签名数据中的hash值。
- 将步骤1中得到的hash值和步骤2得到的hash值进行对比,如果对比结果一致则验证通过,反之验证失败。
ECC(椭圆曲线加密)原理
ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点G,并选取一个整数k,求解K=kG很容易;反过来,在椭圆曲线上给定两个点K和G,若使K=kG,求整数k是一个难题。ECC就是建立在此数学难题之上,这一数学难题称为椭圆曲线离散对数问题。其中椭圆曲线上的点K则为公钥(注意公钥K是一个椭圆曲线点,在OpenSSL里面是用结构体EC_Point来表示的,整数k则为私钥。
RSA是什么,应用在哪些地方?
RSA是依赖于大整数的素因子分解的非对称算法,可应用于WEB,https协议等
散列里MD5什么时候用?
MD5进行信息摘要,可在WEB登录口令时使用,一般采用加盐的方式
如何分辨Base64
- 长度一定会被4整除
- 很多都以等号结尾(为了凑齐所以结尾用等号),当然也存在没有等号的base64
- 仅有英文大小写、数字、+ /
- base64不算加密,仅仅是一门编码
如何分辨MD5
- 一般是固定长度32位(也有16位) // 16 位实际上是从 32 位字符串中,取中间的第 9 位到第 24 位的部分
- 容易加密
- 细微偏差得到最终的值差距很大
- md5加密是一种不可逆的加密算法 //不过貌似我国的王小云院士通过碰撞算法破解了
- 最后,md5经过计算得出128位2进制,正常的32位是二进制转换为16进制,在线网站一般是通过每日加密存储到数据库,与用户查询做对比
密码学中的防篡改和不可抵赖
在传统密码学中,有几种常用的技术可以实现防篡改和不可抵赖:
- 防篡改: 防篡改主要是确保数据的完整性,即数据在传输或存储过程中没有被篡改。传统密码学中,以下方法可以实现防篡改:
- a. 散列函数(Hash Function):散列函数可以将任意长度的输入数据转化为固定长度的输出散列值。它具有抗碰撞性和“雪崩效应”特性,这使得篡改数据变得非常困难。通过比较发送方和接收方的散列值,可以确认数据在传输过程中是否被篡改。
b. 消息认证码(Message Authentication Code, MAC):消息认证码是一种使用共享密钥加密数据的技术。发送方使用共享密钥生成消息认证码,并将其附加到原始数据上;接收方收到数据后,使用相同的共享密钥重新计算消息认证码,如果计算结果与附加的消息认证码相匹配,说明数据没有被篡改。
c. 数字签名:数字签名是一种使用非对称加密技术实现防篡改的方法。发送方使用自己的私钥对数据生成数字签名,接收方使用发送方的公钥验证数字签名。如果验证通过,说明数据在传输过程中没有被篡改。
- 不可抵赖: 不可抵赖是指发送方无法否认自己发送过某条消息。在传统密码学中,数字签名是实现不可抵赖性的主要方法。
数字签名:数字签名不仅可以防篡改,还可以实现不可抵赖。在数字签名机制中,发送方使用自己的私钥对数据进行签名。由于私钥在理论上仅为发送方所持有,因此接收方使用发送方公钥验证签名成功的情况下,发送方就无法否认曾发送过该消息。
总之,在传统密码学中,散列函数、消息认证码和数字签名等技术可以实现防篡改和不可抵赖。这些技术在各种加密协议和安全应用中被广泛使用,以确保数据的完整性和不可抵赖性。
Diffie-Hellman(简称DH)密钥交换算法
Diffie-Hellman(简称DH)密钥交换算法是一种在公共通信渠道上安全地生成共享密钥的方法。它是由Whitfield Diffie和Martin Hellman在1976年首次提出的,也是公钥密码学的奠基技术之一。
Diffie-Hellmand密钥交换算法的主要原理基于离散对数问题,具体而言,它利用了一个特性:在一个很大的整数空间里,计算模数幂数很容易,但反向计算离散对数则相当困难。该算法允许两个通信双方在公共通信渠道上通过一系列计算,最终得到相同的密钥,而攻击者很难从通信中推导出密钥。下面详细介绍Diffie-Hellman密钥交换算法的过程:
- 首先,双方协商选择一个足够大的质数p和一个小于p的正整数g(通常称为基),这两个值可以是公开的,无需保密。
- A方(如Alice)随机选择一个私有整数a(1 <= a <= p-2),并计算$A = g^a mod p$。A的值将作为A方的公钥。
- B方(如Bob)随机选择一个私有整数b(1 <= b <= p-2),并计算$B = g^b mod p$。B的值将作为B方的公钥。
- 双方通过公共通信渠道交换A和B的值。值得注意的是,在传输过程中,攻击者可以获取到p、g、A和B的值,但很难推导出a和b的值,因为这涉及到解离散对数问题,这在现实中是非常困难的。
- A方使用B方的公钥(B值)和自己的私有整数a计算共享密钥:$K_A = B^a mod p$。
- B方使用A方的公钥(A值)和自己的私有整数b计算共享密钥:$K_B = A^b mod p$。
根据离散对数的性质,K_A和K_B将是相等的,即K_A = K_B,所以双方得到了相同的共享密钥。攻击者即使掌握了p、g、A和B的值,仍无法有效地计算出共享密钥,因为离散对数问题的解在计算上非常困难。因此,Diffie-Hellman算法能在不安全的公共通信渠道上为通信双方安全地生成一个共享密钥。
得到共享密钥后,Alice和Bob可以使用这个密钥来加密和解密他们之间的通信。由于共享密钥是经过安全计算得到的,攻击者很难破解加密信息,这保证了通信双方信息的机密性。
然而,需要注意的是,Diffie-Hellman密钥交换算法本身并不提供通信双方身份的认证。为解决这个问题,可以结合使用数字签名技术(如RSA、DSA或ECDSA),以便在进行密钥交换的同时,验证通信双方的身份。
总之,Diffound加密算法基于离散对数问题提供了在公共通信渠道上安全地生成共享密钥的方法。结合其他密码学技术,如数字签名,可以为通信双方提供更加全面的安全保障。
Loading...