市值: $2.607T 0.90%
成交额(24h): $88.5549B -12.29%
恐惧与贪婪指数:

64 - 贪婪

  • 市值: $2.607T 0.90%
  • 成交额(24h): $88.5549B -12.29%
  • 恐惧与贪婪指数:
  • 市值: $2.607T 0.90%
加密货币
话题
百科
资讯
加密话题
视频
热门加密百科

选择语种

选择语种

选择货币

加密货币
话题
百科
资讯
加密话题
视频

什么是Keccak?

Keccak, standardized as SHA-3, is crucial in Ethereum's EVM for hashing transactions and smart contracts, ensuring blockchain security.

2025/04/08 11:28

Keccak是一种加密哈希函数,被选为NIST哈希功能竞争的获胜者,随后将其标准化为SHA-3(安全哈希算法3)。在加密货币的世界中,卡克卡(Keccak)扮演着至关重要的角色,尤其是在以太坊区块链中,在以太坊区块链中,它被用作以太坊虚拟机(EVM)哈希功能的基础。本文将深入研究Keccak的细节,其在加密货币生态系统中的重要性以及如何在以太坊中实施。

Keccak的起源和发展

Keccak是由Guido Bertoni,Joan Daemen,MichaëlPeeters和Gilles van Assche设计的。 “ Keccak”这个名字源自西伯利亚的Ket人所说的KET语言。该算法于2008年首次引入,并于2008年提交NIST竞争。在严格的测试和评估之后,Keccak于2012年被选为赢家,并于2015年被标准化为SHA-3。

Keccak的设计基于海绵结构,这是一种新颖的哈希功能设计方法。海绵结构可实现可变的输出长度,并且具有很高的灵活性,使其适用于广泛的加密应用。这种灵活性是选择在以太坊中使用Keccak的原因之一。

Keccak的工作原理

Keccak使用海绵函数运行,该函数包括两个阶段:吸收阶段和挤压阶段。在吸收阶段,输入消息被分解为固定尺寸的块,并通过Keccak-F置换函数处理。然后,挤压阶段从海绵的内部状态中提取所需的输出。

这是Keccak如何处理数据的简化概述:

  • 初始化:海绵的内部状态初始化为固定值。
  • 吸收阶段:输入消息被填充并分为块。每个块都与内部状态的第一部分一起X键,然后由Keccak-F置换函数处理整个状态。
  • 挤压阶段:在处理了所有块后,通过反复应用Keccak-F置换函数并读取状态部分,从内部状态提取所需的输出。

Keccak-F置换函数是Keccak算法的核心。它在5x5车道的状态阵列上运行,每个车道都是固定数量的位(例如,Keccak-F [1600]的64位)。置换功能由五轮操作组成:Theta,Rho,Pi,Chi和Iota。这些操作旨在确保输出高度无法预测,并且对各种攻击具有抵抗力。

Keccak在以太坊

在以太坊区块链中, Keccak用作以太坊虚拟机(EVM)哈希功能的基础,称为Keccak-256 。此功能用于以太坊生态系统中的各种目的,包括:

  • 事务哈希:以太坊网络中的每个事务都使用KECCAK-256哈希创建唯一的标识符。
  • 状态trie哈希:以太坊区块链的状态存储在TRIE数据结构中,并且Trie中的每个节点均使用Keccak-256哈希。
  • 智能合约执行:KECCAK-256在智能合约中使用,以生成事件和哈希数据的唯一标识符。

在以太坊中使用Keccak-256可确保区块链保持安全并抵抗各种攻击。 Keccak的加密特性,例如其对碰撞攻击和前攻击的抵抗力,使其成为确保以太坊网络的理想选择。

在加密货币项目中​​实施Keccak

对于从事加密货币项目的开发人员,实施Keccak可能是确保其系统安全性的关键步骤。以下是在加密货币项目中​​实现keccak的一些步骤:

  • 选择正确的库:有几个可用的库可以实现Keccak,例如Keccak代码软件包和OpenSSL中的SHA-3库。选择一个维护良好且广泛使用的库。

  • 集成库:将所选库集成到您的项目中。这通常涉及将库添加到项目的依赖项中并将其导入到您的代码中。

  • 使用Keccak功能:使用库提供的Keccak函数来哈希数据。例如,在使用keccak库的JavaScript中,您可以放置​​这样的字符串:

     const keccak256 = require('keccak256'); const input = 'Hello, World!'; const hash = keccak256(input); console.log(hash.toString('hex'));
  • 测试和验证:彻底测试您的实现,以确保其产生正确的输出。您可以使用Keccak团队提供的测试向量来验证您的实现。

  • 优化性能:根据项目的要求,您可能需要优化Keccak实施的性能。这可能涉及使用硬件加速度或以C或Rust等较低级别的语言实现算法。

Keccak的安全考虑

尽管Keccak被认为是安全的哈希功能,但仍有一些安全考虑因素应注意:

  • 碰撞阻力:Keccak设计为对碰撞攻击具有高度抗性,其中两个不同的输入产生相同的输出哈希。但是,使用足够的输出尺寸(例如256位)以最大程度地降低碰撞风险仍然很重要。
  • 预防耐药性:Keccak还设计为对攻击前攻击具有抵抗力,在该攻击者中,攻击者试图找到产生特定输出哈希的输入。但是,重要的是要使用足够大的输入尺寸来确保前攻击是不可行的。
  • 侧通道攻击:Keccak的实现可能容易受到侧向通道攻击的攻击,例如正时攻击或功率分析攻击。开发人员应注意以最大程度地减少侧通道攻击的风险的方式实施Keccak。

Keccak变体及其用途

Keccak有几种变体,每个变体都有不同的参数和用例。加密货币空间中最常用的变体是:

  • KECCAK-224 :此变体可产生224位输出,并用于一些轻巧的加密应用中。
  • KECCAK-256 :该变体产生256位输出,是以太坊和其他加密货币项目中​​最常用的变体。
  • Keccak-384 :此变体可产生384位输出,并用于需要更高级别的安全性的应用中。
  • Keccak-512 :此变体可产生512位输出,并用于需要最高安全性的应用程序。

Keccak的每个变体都旨在在安全性和性能之间提供不同的平衡,从而使开发人员可以选择最适合其特定需求的变体。

常见问题

问:Keccak与SHA-2有何不同?

答:Keccak和Sha-2都是加密哈希功能,但它们具有不同的设计和属性。 Keccak基于海绵结构,而SHA-2基于Merkle –Damgård结构。 Keccak还旨在更加灵活和抵抗某些类型的攻击,例如长度扩展攻击,这是SHA-2的关注点。

问:Keccak可以用于数字签名吗?

答:是的,Keccak可以用作数字签名方案的一部分。但是,它通常与其他密码图(例如椭圆曲线密码学)结合使用,以创建完整的数字签名算法。

问:除了以太坊外,Keccak是否在其他加密货币中使用?

答:是的,Keccak用于其他几个加密货币和区块链项目。例如,IOTA加密货币使用Keccak的变体,称为Curl-P,Zcash Cryptocurrency使用Keccak作为其equihash工作证明算法的一部分。

问:如何验证Keccak实施的正确性?

答:要验证Keccak实施的正确性,您可以使用Keccak团队提供的测试向量。这些测试向量是输入输出对,可用于检查您的实现是否为给定输入产生正确的输出。您可以在Keccak官方网站上找到这些测试向量。

免责声明:info@kdj.com

所提供的信息并非交易建议。根据本文提供的信息进行的任何投资,kdj.com不承担任何责任。加密货币具有高波动性,强烈建议您深入研究后,谨慎投资!

如您认为本网站上使用的内容侵犯了您的版权,请立即联系我们(info@kdj.com),我们将及时删除。

相关百科

什么是 DAI?它与 USDT 有何不同?

什么是 DAI?它与 USDT 有何不同?

2026-09-08 17:00:22

市场波动模式1. 自2021年以来,Bitcoin超过68%的交易日在24小时窗口内价格波动超过15%。 2. 在流动性较低的时期,尤其是在 02:00 至 06:00 UTC 期间,以太坊表现出比 Bitcoin 更高的日内波动性。 3. 稳定币脱钩事件(例如 2023 年 3 月的 USDC 事...

为什么稳定币会失去 1 美元的挂钩?

为什么稳定币会失去 1 美元的挂钩?

2026-09-08 02:00:03

储备构成和透明度差距1. 许多稳定币声称完全由现金或短期美国国债支持,但储备披露往往缺乏实时验证机制。 2. 第三方证明可能仅每季度进行一次,从而留下较长的窗口,使不匹配的资产负债结构仍未被发现。 3. 一些发行人持有的商业票据或逆回购协议存在未反映在公共资产负债表中的交易对手风险。 4. 链下银行...

什么是加密货币中的自我托管以及为什么它很重要?

什么是加密货币中的自我托管以及为什么它很重要?

2026-09-10 04:19:32

定义和核心机制1. 自我保管是指个人保留对其私钥的完全控制权,而不将该权力委托给任何第三方服务的做法。 2. 自我托管钱包的服务器上不持有资产;相反,它提供了一个使用本地存储的加密密钥与区块链网络交互的接口。 3. 用户的设备(无论是智能手机、台式机还是硬件模块)托管种子短语和私钥,并且在正常操作期...

托管钱包与非托管钱包:有什么区别?

托管钱包与非托管钱包:有什么区别?

2026-09-17 03:19:46

托管钱包定义1. 托管钱包是一种由第三方服务提供商持有和管理用户私钥的数字资产存储解决方案。 2. 用户通过电子邮件、密码和双因素身份验证等登录凭据访问资金,而不是直接加密控制。 3. 简化帐户恢复——忘记密码或失去设备访问权限的用户可以通过平台管理的身份验证协议重新获得访问权限。 4. 这些钱包通...

什么是多重签名钱包以及它何时有用?

什么是多重签名钱包以及它何时有用?

2026-09-12 14:20:01

定义及核心架构1. 多重签名钱包是一种加密结构,需要多个私钥来授权单个区块链交易。 2. 它在M-of-N 签名方案下运行,其中M表示所需的最小签名数量, N表示授权签名者的总数。 3. 每个签名者生成独立的密钥对;他们的公钥被共同嵌入到通过确定性散列导出的唯一链上地址中。 4. 没有任何一个参与者...

Bitcoin 与闪电网络:有什么区别?

Bitcoin 与闪电网络:有什么区别?

2026-09-13 15:40:16

核心架构及交易模型1. Bitcoin 在单层、无需许可的区块链上运行,其中每笔交易都经过加密验证,在数千个全节点上传播,并大约每十分钟永久记录在连续块中。 2. 闪电网络作为直接构建在 Bitcoin 的 UTXO 模型之上的点对点覆盖网络,依赖于由时间锁定、可撤销的承诺交易强制执行的双向支付通道...

什么是 DAI?它与 USDT 有何不同?

什么是 DAI?它与 USDT 有何不同?

2026-09-08 17:00:22

市场波动模式1. 自2021年以来,Bitcoin超过68%的交易日在24小时窗口内价格波动超过15%。 2. 在流动性较低的时期,尤其是在 02:00 至 06:00 UTC 期间,以太坊表现出比 Bitcoin 更高的日内波动性。 3. 稳定币脱钩事件(例如 2023 年 3 月的 USDC 事...

为什么稳定币会失去 1 美元的挂钩?

为什么稳定币会失去 1 美元的挂钩?

2026-09-08 02:00:03

储备构成和透明度差距1. 许多稳定币声称完全由现金或短期美国国债支持,但储备披露往往缺乏实时验证机制。 2. 第三方证明可能仅每季度进行一次,从而留下较长的窗口,使不匹配的资产负债结构仍未被发现。 3. 一些发行人持有的商业票据或逆回购协议存在未反映在公共资产负债表中的交易对手风险。 4. 链下银行...

什么是加密货币中的自我托管以及为什么它很重要?

什么是加密货币中的自我托管以及为什么它很重要?

2026-09-10 04:19:32

定义和核心机制1. 自我保管是指个人保留对其私钥的完全控制权,而不将该权力委托给任何第三方服务的做法。 2. 自我托管钱包的服务器上不持有资产;相反,它提供了一个使用本地存储的加密密钥与区块链网络交互的接口。 3. 用户的设备(无论是智能手机、台式机还是硬件模块)托管种子短语和私钥,并且在正常操作期...

托管钱包与非托管钱包:有什么区别?

托管钱包与非托管钱包:有什么区别?

2026-09-17 03:19:46

托管钱包定义1. 托管钱包是一种由第三方服务提供商持有和管理用户私钥的数字资产存储解决方案。 2. 用户通过电子邮件、密码和双因素身份验证等登录凭据访问资金,而不是直接加密控制。 3. 简化帐户恢复——忘记密码或失去设备访问权限的用户可以通过平台管理的身份验证协议重新获得访问权限。 4. 这些钱包通...

什么是多重签名钱包以及它何时有用?

什么是多重签名钱包以及它何时有用?

2026-09-12 14:20:01

定义及核心架构1. 多重签名钱包是一种加密结构,需要多个私钥来授权单个区块链交易。 2. 它在M-of-N 签名方案下运行,其中M表示所需的最小签名数量, N表示授权签名者的总数。 3. 每个签名者生成独立的密钥对;他们的公钥被共同嵌入到通过确定性散列导出的唯一链上地址中。 4. 没有任何一个参与者...

Bitcoin 与闪电网络:有什么区别?

Bitcoin 与闪电网络:有什么区别?

2026-09-13 15:40:16

核心架构及交易模型1. Bitcoin 在单层、无需许可的区块链上运行,其中每笔交易都经过加密验证,在数千个全节点上传播,并大约每十分钟永久记录在连续块中。 2. 闪电网络作为直接构建在 Bitcoin 的 UTXO 模型之上的点对点覆盖网络,依赖于由时间锁定、可撤销的承诺交易强制执行的双向支付通道...

查看所有文章

User not found or password invalid

Your input is correct