- 密码学教程
- 密码学 - 首页
- 密码学 - 起源
- 密码学 - 历史
- 密码学 - 原理
- 密码学 - 应用
- 密码学 - 优点与缺点
- 密码学 - 现代密码学
- 密码学 - 传统密码
- 密码学 - 加密的需求
- 密码学 - 双重强度加密
- 密码系统
- 密码系统
- 密码系统 - 组成部分
- 密码系统攻击
- 密码系统 - 彩虹表攻击
- 密码系统 - 字典攻击
- 密码系统 - 暴力破解攻击
- 密码系统 - 密码分析技术
- 密码学类型
- 密码系统 - 类型
- 公钥加密
- 现代对称密钥加密
- 密码学散列函数
- 密钥管理
- 密码系统 - 密钥生成
- 密码系统 - 密钥存储
- 密码系统 - 密钥分发
- 密码系统 - 密钥撤销
- 分组密码
- 密码系统 - 流密码
- 密码学 - 分组密码
- 密码学 - Feistel 分组密码
- 分组密码的工作模式
- 分组密码的工作模式
- 电子密码本 (ECB) 模式
- 密码分组链接 (CBC) 模式
- 密码反馈 (CFB) 模式
- 输出反馈 (OFB) 模式
- 计数器 (CTR) 模式
- 古典密码
- 密码学 - 反向密码
- 密码学 - 凯撒密码
- 密码学 - ROT13 算法
- 密码学 - 置换密码
- 密码学 - 加密置换密码
- 密码学 - 解密置换密码
- 密码学 - 乘法密码
- 密码学 - 仿射密码
- 密码学 - 简单替换密码
- 密码学 - 简单替换密码的加密
- 密码学 - 简单替换密码的解密
- 密码学 - 维吉尼亚密码
- 密码学 - 维吉尼亚密码的实现
- 现代密码
- Base64 编码与解码
- 密码学 - XOR 加密
- 替换技术
- 密码学 - 单表代换密码
- 密码学 - 单表代换密码的破解
- 密码学 - 多表代换密码
- 密码学 - Playfair 密码
- 密码学 - Hill 密码
- 多表代换密码
- 密码学 - 一次性密码本
- 一次性密码本的实现
- 密码学 - 置换技术
- 密码学 - 栅栏密码
- 密码学 - 列置换密码
- 密码学 - 隐写术
- 对称算法
- 密码学 - 数据加密
- 密码学 - 加密算法
- 密码学 - 数据加密标准 (DES)
- 密码学 - 三重 DES
- 密码学 - 双重 DES
- 高级加密标准 (AES)
- 密码学 - AES 结构
- 密码学 - AES 变换函数
- 密码学 - 字节替换变换
- 密码学 - 行移位变换
- 密码学 - 列混淆变换
- 密码学 - 轮密钥加变换
- 密码学 - AES 密钥扩展算法
- 密码学 - Blowfish 算法
- 密码学 - SHA 算法
- 密码学 - RC4 算法
- 密码学 - Camellia 加密算法
- 密码学 - ChaCha20 加密算法
- 密码学 - CAST5 加密算法
- 密码学 - SEED 加密算法
- 密码学 - SM4 加密算法
- IDEA - 国际数据加密算法
- 公钥(非对称)密码算法
- 密码学 - RSA 算法
- 密码学 - RSA 加密
- 密码学 - RSA 解密
- 密码学 - 创建 RSA 密钥
- 密码学 - 破解 RSA 密码
- 密码学 - ECDSA 算法
- 密码学 - DSA 算法
- 密码学 - Diffie-Hellman 算法
- 密码学中的数据完整性
- 密码学中的数据完整性
- 消息认证
- 密码学数字签名
- 公钥基础设施 (PKI)
- 哈希
- MD5 (消息摘要算法 5)
- SHA-1 (安全哈希算法 1)
- SHA-256 (安全哈希算法 256 位)
- SHA-512 (安全哈希算法 512 位)
- SHA-3 (安全哈希算法 3)
- 哈希密码
- Bcrypt 哈希模块
- 现代密码学
- 量子密码学
- 后量子密码学
- 密码学协议
- 密码学 - SSL/TLS 协议
- 密码学 - SSH 协议
- 密码学 - IPsec 协议
- 密码学 - PGP 协议
- 图像与文件加密
- 密码学 - 图像
- 密码学 - 文件
- 隐写术 - 图像
- 文件加密和解密
- 密码学 - 文件加密
- 密码学 - 文件解密
- 物联网中的密码学
- 物联网安全挑战、威胁和攻击
- 物联网安全的密码技术
- 物联网设备的通信协议
- 常用密码技术
- 自定义构建密码算法(混合密码学)
- 云密码学
- 量子密码学
- 密码学中的图像隐写术
- DNA 密码学
- 密码学中的一次性密码 (OTP) 算法
- 区别
- 密码学 - MD5 vs SHA1
- 密码学 - RSA vs DSA
- 密码学 - RSA vs Diffie-Hellman
- 密码学 vs 密码学
- 密码学 - 密码学 vs 密码分析
- 密码学 - 经典密码学 vs 量子密码学
- 密码学 vs 隐写术
- 密码学 vs 加密
- 密码学 vs 网络安全
- 密码学 - 流密码 vs 分组密码
- 密码学 - AES vs DES 密码
- 密码学 - 对称密码 vs 非对称密码
- 密码学有用资源
- 密码学 - 快速指南
- 密码学 - 讨论
密码学 - ECDSA 算法
椭圆曲线数字签名算法 (ECDSA) 是最复杂的公钥密码加密技术之一。椭圆曲线密码学生成的密钥比数字签名方法生成的密钥更小。一种称为椭圆曲线密码学的公钥加密利用了有限域上椭圆曲线的代数结构。
椭圆曲线密码学主要用于创建伪随机数和数字签名等。数字签名是一种身份验证机制,它使用公钥对和数字证书来验证信息接收者或发送者的身份。
什么是椭圆曲线数字签名算法?
ECDSA 执行与任何其他数字签名相同的函数,但效率更高。这样,ECDSA 与其他数字签名算法一样,可以使用更小的密钥提供相同的安全级别。ECDSA 用于创建 ECDSA 证书,这是一种用于验证证书所有者的电子文档。证书包含有关用于创建证书的密钥、证书所有者和发行者签名的信息,发行者签名是一个经过验证的可信实体。
这个可信的发行者通常是具有已签名证书的证书颁发机构,该证书可以通过信任链追溯到原始的发行者证书颁发机构。
ECDSA 通过分析椭圆曲线并在曲线上选择一个点来操作。该点乘以另一个数,在曲线上产生一个新点。
即使原始点可用,也很难在曲线上找到新点。ECDSA 的复杂性意味着它比当前的加密破解方法更安全。除了对当前攻击方法更安全之外,ECDSA 还具有许多其他优点。
密钥和签名大小
ECDSA 认为所需的私钥的位大小大约是安全级别(以位为单位)的两倍,这与一般的椭圆曲线密码学类似。例如,在 80 位的安全级别下,ECDSA 私钥的大小约为 160 位,这需要攻击者执行大约 280 次操作才能发现私钥。
但是,DSA 和 ECDSA 的签名大小相同:大约 4t 位,其中 t 是公式 2t 中的指数,用于 80 位安全级别,即大约 320 位,或 280 次操作。
签名生成
假设 Alice 想给 Bob 发送一条签名的消息。他们必须首先就曲线的参数达成一致 (CURVE, G, n)。除了曲线的域和方程之外,还需要基点 G(曲线上素数阶的基点);n 是点 G 的乘法阶。
参数
- CURVE - 用于椭圆曲线的方程和域。
- G - 椭圆曲线的基点;曲线上产生大素数阶子群 n 的一个点。
- n - G 的整数阶,这表示 n x G = O,其中 O 是单位元。
- dA - 随机选择的私钥。
- QA - 公钥 dA x G(椭圆曲线计算)
- m - 要传输的文本
起点 G 的阶 n 必须是素数。事实上,Z/nZ 必须是一个域,因为我们假设环的每个非零元素都是可逆的。这意味着 n 必须是一个素数。
Alice 生成一对密钥,包括公钥曲线点 QA = dA x G 和私钥整数 dA,后者是从区间 [1, n-1] 中随机选择的。标量的椭圆曲线点乘法用符号 x 表示。
签名消息
Alice 为了签名消息执行以下步骤:
- 确定 e = HASH(m)。(这里,HASH 指的是将输出转换为整数的密码哈希算法,例如 SHA-2。)
- 令 z 表示 e 的最左边的 Ln 位,其中 Ln 表示群阶 n 的位长度。(请注意,z 不长于 n,尽管它可以是。)
- 选择 k,一个来自 [1, n-1] 的密码安全的随机整数。
- 计算曲线点,其中 k x G = (x1, y1) = 0。
- 通过取 x1 mod n 来计算 r。如果 r = 0,请参考步骤 3。
- 必须计算 S = k-1 (z + rdA) mod n。如果 s = 0,请参考步骤 3。
- 这对 (r, s) 就是签名。此外,(r, -s mod n) 也是有效的签名。
如果 k 由不可靠的随机数生成器产生,则 ECDSA 签名可能会泄露私钥的另一种方法。2013 年 8 月,Android 比特币钱包的用户由于随机数生成错误而损失了资金。
您可以通过从消息和私钥派生 k 来生成确定性签名,从而完全避免随机数的创建,并确保 k 对于每次通信都是唯一的。
使用 Python 实现 ECDSA
基本上,我们将使用 Python 的 ecdsa 库,它提供了处理 ECDSA 算法的功能。我们还将使用 hashlib 库将给定的消息转换为哈希形式。以下是使用 ecdsa 和 haslib 库的 ECDSA 的简单 Python 实现:
示例
from ecdsa import SigningKey, VerifyingKey, SECP256k1 import hashlib # Create a new private key private_key = SigningKey.generate(curve=SECP256k1) # Derive the public key from the private key public_key = private_key.verifying_key # Some message to sign message = b"Hello, Tutorialspoint!" # Hash the message hash_message = hashlib.sha256(message).digest() # Sign the hashed message with the private key signature = private_key.sign(hash_message) # Verify the signature using the public key is_valid = public_key.verify(signature, hash_message) if is_valid: print("Signature is valid.") else: print("Signature is not valid.")
以下是上述示例的输出:
输入/输出
运行以上代码需要安装Python的hashlib和ecdsa库。可以使用`pip install 'libraryName'`安装这些库。将代码保存到文件中,然后使用`python ecdsa_implement.py`运行此代码。这里我们的文件名是ecdsa_implement.py。文件的输出如下:
Signature is valid.
ECDSA的安全性
虽然RSA是一种非常安全的加密方法,但ECC可能更有效。
理论上,量子计算机可以通过有效解决RSA的基础——因式分解问题来破解RSA。关于这何时会发生存在很多争议。但可以肯定的是,与RSA相比,由于其复杂性,ECC对量子计算攻击更具抵抗力。
抵抗力有多强?在一篇研究论文中,一位荷兰数学家将破解加密方法比作烧水。目标是确定破解特定加密算法所需的能量以及可以用该能量烧开的开水量。
换句话说,破解228位ECC密钥可以烧开地球上所有的水,而破解228位RSA密钥所需的能量却比烧开一茶匙水还要少。要达到与RSA相同的安全级别,需要2380位的密钥大小。
ECDSA的弱点
根据现有信息,椭圆曲线数字签名算法的弱点分析如下:
- 实现复杂性 - ECDSA 的正确实现比 RSA 更困难,这可能会增加实现错误的可能性。实现不当的椭圆曲线数字签名算法可能会危及安全性。
- 输出长度 - 对于相同的安全级别,ECDSA 比 RSA 产生的输出长度更短。3072 位 RSA 签名等于 256 位 ECDSA 签名的安全级别。较短的输出长度可能会使 ECDSA 签名更容易受到暴力攻击。
- 椭圆曲线的选择 - 椭圆曲线很重要,因为某些曲线允许攻击者进行暴力破解加密。选择能够防止攻击者找到离散对数问题的多项式时间实现的椭圆曲线至关重要。
- 扭曲攻击 - “扭曲攻击”是一种潜在的弱点,攻击者向消息接收者发送一组精心选择的椭圆曲线点进行加密。如果消息接收者的算法实现不当,攻击者可能会能够从密文中提取私钥。
- 安全性与实现复杂性 - ECDSA 的实现难度会影响其安全性。确保安全实现对于避免漏洞至关重要。
ECDSA 的用途
- 安全的通信协议 - ECC 用于许多安全的通信协议中,以实现加密、数字签名和密钥交换。例如,用于安全网络通信的虚拟专用网络 (VPN),用于安全远程登录的安全外壳 (SSH) 以及用于安全在线浏览的传输层安全 (TLS)。
- 区块链技术和加密货币 - 比特币、以太坊和莱特币等多种加密货币使用椭圆曲线密码学来创建公钥和私钥对以及签名交易。ECC 提供了保护数字资产和保证区块链网络完整性所需的加密保护。
- 智能卡和嵌入式系统 - ECC 常用于保护电子护照、支付系统、访问控制系统以及其他需要小型安全加密解决方案的应用程序。
ECDSA 的优点
- 2005 年制定了新的标准。
- 标准化减少了黑客时间,因此时间更短。
- 其复杂性和新颖性使其不易受到攻击。
- 对于新兴的公钥密码学协议来说是一个理想的替代方案。
ECDSA 的缺点
- 实现复杂,可能导致错误的实现。
- RSA 于 1995 年标准化,拥有更悠久的历史。
- 由于其悠久的历史,RSA 仍然是最广泛使用的方法。
- RSA 更易于设置,部署障碍更少。