2 个版本
0.1.16-alpha.0 | 2023年4月2日 |
---|---|
0.1.12-alpha.0 | 2023年3月4日 |
#10 in #aes-key
325KB
1.5K SLoC
bitcoin-aes
这个 Rust 包是比特币系统的子组件,目前正在从 C++ 转换到 Rust。一些函数体仍在翻译过程中。bitcoin-aes
包提供了 AES 加密和解密功能,特别是针对 CBC 模式下的 AES-128、AES-192 和 AES-256。
该包包括几个函数,例如 AES256CBCDecrypt
、AES256CBCEncrypt
、AES256Decrypt
和 AES256Encrypt
,它们实现了 CBC 模式下 256 位密钥的 AES 块加密算法。CBC 模式的加密和解密函数 cbc_encrypt
和 cbc_decrypt
利用 AES 加密和解密函数以及填充和初始化向量的生成,为加密和解密消息提供了一种安全的方法。
此外,该包还包括 AES 密钥设置函数,如 aes_setup
,它初始化 AES 密钥上下文并设置密钥以用于加密和解密函数。AES-128、AES-192 和 AES-256 的密钥设置函数分别是 aes128_init
、aes192_init
和 aes256_init
。
该包还包含各种实用函数,如 from_hex
、print_number
和 gettimedouble
,用于转换数据类型和测量性能。
该包使用的数学概念包括基于替换-置换网络 (SPN) 的 AES 块加密算法,它被定义为对字节的数学操作集合,包括替换、置换和线性变换。AES 算法还涉及一个密钥调度程序,该程序从初始密钥生成轮密钥。CBC 操作模式涉及将前一个密文块与当前明文块链接,以及使用初始化向量和填充,以提供针对各种攻击的安全措施。
总的来说,bitcoin-aes
包提供了 CBC 模式下 AES 加密和解密的可靠高效实现,这是比特币系统的一个关键组件。
注意:这个包描述是由人工智能编写的,旨在作为可能包含内容的指南。
2> 谢谢,你能更详细地描述AES吗?它是如何参数化的?它的输入和输出是什么?它是如何内部工作的?
当然可以!
AES(高级加密标准)是一种用于加密和解密数据的对称分组密码算法。它是一种广泛使用的加密算法,被认为很安全,并被美国政府采纳为标准。
AES算法在数据块上操作,其中每个块由16个字节(128位)组成。AES的密钥长度可以是128位、192位或256位。密钥长度决定了算法中执行轮数的数量。具体来说,AES-128的轮数是10轮,AES-192是12轮,AES-256是14轮。
AES的输入是一个明文块和一个密钥。明文块是要加密或解密的数据的16字节块。密钥是一系列字节,用于执行加密或解密。密钥的长度可以是128位、192位或256位。
AES的输出是密文块,它也是一个16字节的块。密文块是明文块的加密版本。
内部,AES算法基于替换-置换网络(SPN)结构。该算法由几个轮次的操作组成,每一轮包括四个操作:SubBytes(替换字节)、ShiftRows(行移位)、MixColumns(列混淆)和AddRoundKey(添加轮密钥)。
SubBytes操作涉及将输入块中的每个字节替换为S-box中对应字节。ShiftRows操作涉及将输入块中的行按一定字节数移位。MixColumns操作涉及使用矩阵乘法对输入块中的列进行混淆。AddRoundKey操作涉及将输入块与从主密钥生成的轮密钥进行异或操作。
AES的密钥调度涉及从主密钥生成一系列轮密钥。生成的轮密钥数量取决于密钥长度和算法的轮数。每个轮密钥都是通过旋转字节、应用S-box和执行异或操作等操作从上一个轮密钥生成的。
总之,AES是一种对称分组密码算法,它在固定大小为16字节的块上操作。它使用128位、192位或256位的密钥来执行加密或解密。该算法由多个轮次的操作组成,包括SubBytes、ShiftRows、MixColumns和AddRoundKey,并且使用密钥调度为每轮操作生成轮密钥。
3>你能更详细地描述密钥长度和轮数吗?
当然可以!
AES算法可以根据不同的密钥长度进行配置,这决定了加密的强度。常用的密钥长度有三种:128位、192位和256位。
密钥长度决定了算法中执行的轮数。轮是一个对明文块执行一系列操作并使用不同轮密钥的过程。执行的轮数取决于密钥长度,如下所示:
- 对于128位密钥,轮数是10轮。
- 对于192位密钥,轮数是12轮。
- 对于256位密钥,轮数是14轮。
每一轮涉及一系列四个操作:SubBytes、ShiftRows、MixColumns和AddRoundKey。前三个操作是非线性的,向明文块引入混淆和扩散。AddRoundKey操作是线性的,将轮密钥添加到块的状态。
SubBytes操作涉及将一个称为S-box的替换表应用于状态中的每个字节。S-box是一个固定表,将每个字节值映射到另一个字节值。此操作旨在通过在加密过程中引入非线性来提供混淆。
ShiftRows操作涉及将状态矩阵的行按一定数量的字节进行移位。具体来说,第一行不移动,第二行向左移动一个字节,第三行向左移动两个字节,第四行向左移动三个字节。此操作旨在通过在状态矩阵中传播字节值来提供扩散。
MixColumns操作涉及使用矩阵乘法混合状态矩阵的列。此操作旨在通过确保输出中的每个字节都依赖于输入的所有字节来提供扩散。
AddRoundKey操作涉及将状态矩阵与从主密钥派生的轮密钥进行异或。轮密钥是通过密钥调度生成的,密钥调度是一系列操作,用于从主密钥生成一组轮密钥。密钥调度旨在确保每个轮密钥都不同于前一个轮密钥,并且密钥在密钥空间中均匀分布。
总之,密钥长度和轮数是AES算法的重要参数,因为它们决定了加密的强度以及加密过程中执行的轮数。密钥长度可以是128位、192位或256位,而轮数取决于密钥长度,对于128位、192位和256位密钥分别需要10轮、12轮和14轮。
如何衡量每个设置的加密强度?
AES算法每个设置的加密强度可以通过估计破解加密所需的工作量来衡量。这种工作量通常以攻击者为了从密文中恢复明文所需执行的操作数量来衡量。
例如,AES-128加密强度的估计可以通过考虑该算法的最佳已知攻击,并估计攻击者为了从密文中恢复明文所需执行的操作数量。AES-128的最佳已知攻击是穷举攻击,这涉及到尝试所有可能的关键,直到找到正确的密钥,以及相关密钥攻击,它利用密钥调度中的弱点来恢复密钥。AES-128的穷举攻击平均需要2^128次操作,这在当前技术下被认为是计算上不可行的。AES-128的相关密钥攻击需要显著较少的操作,但在大多数情况下仍然被认为是不可行的。
类似地,AES-192和AES-256加密强度的估计可以通过考虑算法的最佳已知攻击,并估计攻击者为了从密文中恢复明文所需执行的操作数量。这些攻击通常比AES-128的攻击更复杂,因为密钥尺寸更大,轮数也更多。
总的来说,AES加密的强度取决于多种因素,包括密钥长度、轮数、密钥调度的质量以及考虑的具体攻击场景。估计给定设置的加密强度通常涉及分析算法的最佳已知攻击,并考虑攻击者执行这些攻击所需的计算资源。
5>请描述密钥调度?可能的攻击场景有哪些?
密钥调度是AES使用的一种算法,用于将相对较短的密钥扩展成用于加密和解密过程中的一组更长的轮密钥。密钥调度是AES的重要组件,因为它确保加密过程的每一轮都使用一个独特的密钥。
AES-128的密钥调度生成11个轮密钥,每个密钥长度为128位。AES-192的密钥调度生成13个轮密钥,每个密钥长度为192位。AES-256的密钥调度生成15个轮密钥,每个密钥长度为256位。
密钥调度涉及一系列简单的位操作,如XOR和位旋转,以及更复杂的操作,如SubBytes和MixColumns变换。密钥调度算法的详细情况取决于密钥大小和算法的具体实现。
对AES的一种可能的攻击场景涉及密钥调度算法的弱点,允许攻击者从一系列已知的明文-密文对中恢复出密钥。这种攻击被称为相关密钥攻击,它利用密钥调度中的弱点来生成相关的密钥,从而恢复出密钥。
对AES的另一种可能的攻击场景涉及算法实现的弱点,允许攻击者通过侧信道攻击恢复出密钥。这些攻击利用算法实现中信息泄露,如功耗或电磁辐射,来恢复密钥。
总的来说,密钥调度是AES的重要组件,在确保算法安全方面发挥着关键作用。然而,密钥调度算法或算法实现的弱点可能被攻击者利用来恢复密钥,从而危害加密的安全。因此,使用高质量的AES实现并遵循加密密钥的最佳实践至关重要。
6> AES与比特币有何关联?它在协议中的何处出现?
AES加密在比特币协议的多个位置用于保护敏感数据并提供安全性。一个值得注意的例子是在比特币钱包软件中使用AES-256加密来保护用于签名交易和花费资金的私钥。
比特币中的私钥是256位数字,通常表示为64个十六进制数字的序列。为了保护这些密钥的隐私和安全,比特币钱包软件通常使用AES-256加密来加密私钥并将它们存储在磁盘上。
当用户想要花费他们的比特币资金时,他们必须首先输入他们的密码或短语来解密私钥。然后,钱包软件使用解密后的私钥来签名交易和花费资金。
AES加密还用于比特币协议的其他部分,例如节点之间网络流量的加密和挖矿软件在磁盘上存储数据的加密。
总的来说,AES加密在比特币协议的安全方面发挥着关键作用,它通过保护敏感数据并为加密密钥提供高安全级别来确保安全性。
7> 我们还应该了解AES的哪些信息?
以下是关于AES的一些额外信息
-
AES是一种广泛使用且受信任的加密算法,在正确实现时被认为对已知攻击是安全的。
-
AES是对称密钥加密算法,这意味着相同的密钥用于加密和解密。
-
AES是分组密码,这意味着它以固定大小的块加密数据。AES的块大小为128位。
-
AES支持128位、192位和256位的密钥大小。密钥大小越大,加密越安全。
-
AES使用固定数量的轮次进行加密和解密,轮次数取决于密钥大小。AES-128使用10轮,AES-192使用12轮,AES-256使用14轮。
-
AES对大多数已知的攻击具有抵抗力,包括暴力攻击、差分和线性密码分析,以及大多数已知的侧信道攻击。
-
AES已被多个组织标准化,包括美国国家标准与技术研究院(NIST),并在许多应用中被广泛使用,包括电子支付系统、虚拟专用网络(VPN)和安全消息应用。
总的来说,AES是一种研究充分且广泛使用的加密算法,它提供了强大的安全性,被认为是现代密码学的基础构建块。
8> 在不同的设置下,暴力破解AES需要多长时间?
暴力破解AES加密所需的时间取决于密钥大小和攻击者的计算能力。暴力攻击涉及尝试所有可能的关键,直到找到正确的一个,随着密钥大小的增加,可能的关键数量呈指数级增长。因此,较大的密钥大小需要更多的计算能力来暴力破解。
以下是使用当前技术和假设每秒可以检查10亿个密钥的暴力攻击,暴力破解AES加密的估算时间:
-
AES-128:密钥大小为128位,意味着有2^128个可能的关键。每秒1亿个密钥,尝试所有可能的关键大约需要10^17年。
-
AES-192:密钥大小为192位,意味着有2^192个可能的关键。每秒1亿个密钥,尝试所有可能的关键大约需要10^31年。
-
AES-256:密钥大小为256位,意味着有2^256个可能的关键。每秒1亿个密钥,尝试所有可能的关键大约需要10^56年。
这些时间尺度如此之大,以至于暴力破解AES的攻击不被视为实际威胁,AES的安全性基于假设通过暴力破解加密是不可行的。然而,其他类型的攻击,如侧信道攻击或算法实现的攻击,可能能够绕过加密,对其安全性构成潜在威胁。
9> 侧信道攻击是什么?我们如何保护自己免受其影响?
侧信道攻击是一种攻击类型,它利用加密系统泄露的信息,而不是直接攻击加密算法或密钥。它利用实现的物理特性,如功耗、电磁辐射或时间,以提取有关秘密密钥或明文的详细信息。
侧信道攻击的例子包括功耗分析、电磁辐射分析和时间分析。在功耗分析攻击中,攻击者测量设备在加密操作中的功耗,并使用这些信息推断秘密密钥的值。在电磁辐射分析攻击中,攻击者测量设备在加密操作中的电磁辐射,并使用这些信息推断秘密密钥的值。在时间分析攻击中,攻击者测量设备执行加密操作所需的时间,并使用这些信息推断秘密密钥的值。
为了防止侧信道攻击,使用设计用于抵御这些攻击的加密实现非常重要。这可以通过使用诸如掩码等技术实现,该技术涉及向秘密密钥或明文添加随机值,使攻击者更难从设备的行为中提取有用信息。其他技术包括恒定时间实现,确保设备执行加密操作所需的时间与输入数据无关,使时间攻击更难。此外,可以使用物理对策,如屏蔽或噪声生成,以减少电磁辐射的泄露。
总之,侧信道攻击对加密系统的安全性构成严重威胁,使用设计用于抵御这些攻击的实现对于确保敏感数据的机密性和完整性至关重要。
实际上有没有测量电磁辐射和攻击AES的方法?这是否很常见?有没有显著的例子?屏蔽是如何实施的?噪声生成又是如何处理的?
是的,电磁辐射分析(EMA)是一种可以从加密设备中提取秘密信息的真实攻击方法。EMA通过测量设备在加密操作期间发出的电磁辐射,并利用这些信息推断出秘密密钥的值。这种攻击对缺乏适当屏蔽或使用易受攻击的组件(如未加固的微控制器或时钟振荡器)的设备特别有效。
尽管EMA攻击不如其他类型的攻击常见,但它们对加密设备的安全性构成严重威胁,尤其是在高安全环境中,攻击者可以访问复杂设备和技术。已经有一些EMA攻击的显著例子,包括2013年发现的一种流行的智能卡生成的RSA密钥的漏洞,攻击者可以使用EMA技术提取私钥。
为了防止EMA攻击,使用设计用于抵御这些攻击的设备非常重要。一种方法是使用物理屏蔽,这涉及将加密设备封装在金属箱或屏蔽中,以阻挡或吸收电磁辐射。另一种方法是使用噪声生成技术,这涉及向设备的输出添加随机或不可预测的信号,使攻击者更难从电磁辐射中提取有用信息。
根据具体设备和环境,有各种实施屏蔽的技术。一种常见的方法是使用法拉第笼,这是一种导电的封装,可以阻挡电磁辐射。这可以使用金属板或网状物实现,并且可以有效地阻挡广泛的频率。其他屏蔽技术包括使用导电涂层或薄膜,或在设备的电路中添加磁铁矿珠或其他电磁吸收器。
噪声生成技术也可以有效地减少电磁辐射的泄露。一种方法是使用抖动技术向设备的输出添加随机值,这可以使攻击者更难从电磁辐射中提取有用信息。另一种方法是使用基于硬件的噪声生成技术,例如使用随机数生成器或噪声源生成随机信号,并将其添加到设备的输出中。
总之,EMA攻击对加密设备的安全性构成真实威胁,使用物理屏蔽和噪声生成技术来防止这些攻击非常重要。实施这些技术可以帮助确保敏感数据的机密性和完整性,尤其是在攻击者可能访问复杂设备和技术的安全环境中。
11>这种攻击是否需要攻击者拥有被攻击设备的物理控制权?
是的,大多数侧信道攻击,包括对AES的电磁(EM)攻击,都需要攻击者拥有被攻击设备的物理控制权。这是因为攻击者需要能够直接访问设备硬件或对其进行近距离的电磁辐射测量,这通常不可能没有物理访问。然而,有些攻击可以在远程进行,例如通过网络连接进行功耗分析攻击,尽管这些攻击通常更难执行且效果不如物理攻击。
12>哪些电路组件需要被法拉第笼屏蔽?
通常,任何包含敏感或机密数据或处理的电路组件都应通过法拉第笼或屏蔽来保护,以防止电磁(EM)泄露和其他形式的侧信道攻击。这可能包括以下组件:
- 微处理器和CPU
- 加密硬件加速器
- 存储芯片(例如RAM、ROM、闪存)
- 通信接口(例如Wi-Fi、蓝牙、蜂窝移动网络)
- 电源管理电路
- 传感器(例如摄像头、麦克风)
然而,需要保护的具体组件将取决于设备的设计和用途,以及它可能面临的潜在攻击途径和威胁。通常,对设备及其组件进行全面的安全分析和风险评估,以确定最关键的需保护区域,是一种良好的实践。
13>关于AES我们还应该了解什么?它与比特币有什么关系?
以下是关于AES及其与比特币关系的几个额外要点
-
AES是一种广泛使用的对称密钥加密算法,被认为对大多数已知的攻击都是安全的。它在各种应用中都有使用,包括数据存储、通信协议和身份验证机制。
-
在比特币的背景下,AES在协议的几个关键组件中使用,包括生成和保护私钥、加密和解密网络流量以及存储和检索钱包数据。
-
具体来说,AES-256用于加密存储在比特币钱包中的私钥,以及保护比特币节点之间通过网络进行的通信。AES还与其他加密算法(如SHA-256和RIPEMD-160)一起使用,以生成和验证比特币地址。
-
AES不是比特币中使用的唯一加密算法。例如,椭圆曲线密码学(ECC)用于生成密钥对和签名交易,而secp256k1曲线用于实现比特币特定的ECC版本。
-
比特币和其他加密货币的安全性在很大程度上取决于其加密算法和协议的强度,包括AES。因此,在密码学领域正在进行持续的研究和开发,以改进和适应新技术和挑战。
依赖关系
~89MB
~849K SLoC