当前位置: 首页 > article >正文

从以太坊地址生成到TLS 1.3:聊聊Keccak算法在真实项目里的那些事儿

从以太坊地址生成到TLS 1.3聊聊Keccak算法在真实项目里的那些事儿在密码学领域Keccak算法就像一位低调的瑞士军刀——你可能每天都在使用它却浑然不觉。当你在以太坊钱包里查看账户地址时当你的浏览器与网站建立TLS 1.3加密连接时甚至当你在Filecoin网络存储文件时Keccak都在幕后默默工作。这个由比利时密码学家团队设计的算法以其独特的海绵结构和抗量子特性正在重塑现代加密应用的底层架构。与教科书式的算法解析不同本文将带你深入三个真实的技术栈以太坊地址生成机制、TLS 1.3密钥派生流程以及Filecoin存储证明系统。我们会用具体的代码片段和协议分析揭示Keccak如何在不同场景中解决实际问题以及开发者在使用时需要注意的那些坑。1. 以太坊为何选择非标准Keccak-2562014年以太坊白皮书发布时NIST刚刚将Keccak标准化为SHA-3。但Vitalik团队做了一个出人意料的决定继续使用原始Keccak-256而非标准SHA-3。这个选择背后藏着区块链开发者必须了解的密码学权衡。1.1 地址生成中的关键四步以太坊账户地址本质上是Keccak-256哈希的产物。让我们用Go代码还原这个过程package main import ( crypto/ecdsa crypto/rand github.com/ethereum/go-ethereum/crypto ) func generateAddress() { // 1. 生成ECDSA密钥对 privateKey, _ : ecdsa.GenerateKey(crypto.S256(), rand.Reader) // 2. 提取公钥的未压缩格式65字节 pubKey : append(privateKey.PublicKey.X.Bytes(), privateKey.PublicKey.Y.Bytes()...) // 3. 对公钥进行Keccak-256哈希注意不是标准SHA3 hash : crypto.Keccak256(pubKey[1:]) // 跳过04前缀 // 4. 取最后20字节作为地址 address : hash[12:] }关键点在于第三步的哈希处理。标准SHA-3与以太坊Keccak的主要差异在于特性以太坊Keccak-256NIST SHA3-256填充规则原始Keccak填充Pad10*1初始状态全零特定常量异或输出截断取前256位标准256位1.2 交易哈希的防篡改设计以太坊每笔交易都会经过Keccak处理生成唯一指纹。这个设计巧妙利用了海绵结构的两个特性抗碰撞性即使交易内容微调如gasPrice增加1wei哈希值也会雪崩式变化长度扩展免疫攻击者无法从H(tx)推导出H(tx||malicious_data)以下是一个交易哈希的Python示例from eth_hash.auto import keccak def calculate_tx_hash(tx_data): # RLP编码交易数据 encoded rlp.encode(tx_data) # 应用Keccak-256 return keccak(encoded).hex()实际案例2020年某DeFi协议因直接使用sha3库实现的是标准SHA-3验证交易导致与以太坊客户端不兼容造成约$150万损失。这印证了理解算法变种差异的重要性。2. TLS 1.3中的密钥派生魔法当你在浏览器地址栏看到小锁图标时Keccak正在通过HKDF算法为你建立安全通道。TLS 1.3抛弃了传统的PRF函数改用基于哈希的HKDF而SHA3系列正是首选候选。2.1 握手阶段的密钥计算TLS 1.3密钥派生流程如下早期密钥 (Early Secret) | v 握手密钥 (Handshake Secret) - [ClientHello...ServerHello] | v 主密钥 (Master Secret) - [ServerFinished] | v 会话密钥 (Session Keys) - HKDF-Expand-Label关键步骤使用HMAC驱动的HKDFimport hmac from hashlib import sha3_256 def hkdf_extract(salt, ikm): # 使用SHA3-256作为HMAC哈希函数 return hmac.new(salt, ikm, sha3_256).digest() def hkdf_expand(prk, info, length): t b okm b for i in range(0, (length 31) // 32): t hmac.new(prk, t info bytes([i1]), sha3_256).digest() okm t return okm[:length]2.2 选择SHA3而非SHA2的原因在TLS 1.3的密码套件中SHA3系列相比SHA2有三大优势抗硬件攻击对侧信道攻击如计时攻击更具抵抗力灵活输出SHAKE模式可生成任意长度密钥材料未来安全NIST建议在后量子时代优先迁移到SHA3实测数据显示在ARMv8处理器上算法吞吐量(MB/s)每字节能耗(nJ)SHA3-2564202.1SHA2-2565801.8Blake2b9201.2虽然SHA3性能略逊但其安全边际更适合长期会话如VPN隧道。3. Filecoin中的存储证明变体Filecoin将Keccak改造为存储证明(PoRep/PoSt)的核心组件。与以太坊不同它需要处理海量数据32GB扇区这催生了特殊的优化技术。3.1 分层默克尔树结构Filecoin的存储证明采用两层哈希结构原始数据 → | 分片Keccak | → 叶子节点 | v | 层叠Poseidon哈希 | → 根哈希这种混合设计是因为Keccak保证原始数据的抗碰撞性Poseidon零知识证明友好减少电路约束一个Rust实现的片段use tiny_keccak::{Keccak, Hasher}; fn build_sector_tree(data: [u8]) - [u8; 32] { let mut leaves vec![]; // 第一层Keccak处理原始数据块 for chunk in data.chunks(1024) { let mut hasher Keccak::v256(); hasher.update(chunk); let mut output [0u8; 32]; hasher.finalize(mut output); leaves.push(output); } // 第二层Poseidon聚合 poseidon_hash(leaves) }3.2 性能优化技巧在处理TB级存储时原生Keccak可能成为瓶颈。Filecoin团队发现了几个关键优化点SIMD并行化利用AVX2指令集并行处理多个消息块内存布局将5x5状态矩阵按列连续存储减少缓存未命中预计算轮常数将ι步骤的轮常数预先计算并存入寄存器实测优化效果优化阶段吞吐量提升内存占用降低基线实现1x0%AVX2向量化3.2x15%内存布局调整1.4x-20%综合优化4.8x-5%4. 开发者实践指南在不同技术栈中使用Keccak时有几个容易踩坑的细节值得注意。4.1 各语言中的实现差异语言/平台推荐库注意事项Gogolang.org/x/crypto/sha3默认实现标准SHA3以太坊需用geth的crypto包Pythonpysha3PyPI上的sha3包实际是标准SHA3JavaScriptjs-sha3注意区分keccak和sha3Rusttiny-keccak纯Rust实现支持no_std常见陷阱某交易所曾因混淆Python的sha3与pysha3库导致充值地址验证漏洞损失约50 BTC。4.2 安全配置参数当自定义Keccak参数时如b800, r544, c256需要确保容量c ≥ 2倍安全强度如128位安全需c≥256避免非标准填充规则导致的前像攻击在多轮哈希时显式分隔不同用途的输出一个安全的密钥派生示例func deriveKey(password, salt []byte) []byte { // 1. 配置适当参数 h : sha3.NewLegacyKeccak256() // 2. 显式域分隔 h.Write([]byte{0x01}) // 密钥派生域 // 3. 迭代加强 for i : 0; i 10000; i { h.Write(password) h.Write(salt) password h.Sum(nil) h.Reset() } return password[:32] }在调试Keccak相关代码时这些测试向量非常有用Input: Keccak-256: c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 Input: hello Keccak-256: 1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8理解Keccak在真实项目中的应用就像获得了一把打开现代密码学世界的万能钥匙。从区块链到网络安全这个看似简单的海绵结构正在支撑着数字世界的信任基础。当你下次发送以太坊交易时或许会想起那1600位的状态矩阵正在为你安全护航。

相关文章:

从以太坊地址生成到TLS 1.3:聊聊Keccak算法在真实项目里的那些事儿

从以太坊地址生成到TLS 1.3:聊聊Keccak算法在真实项目里的那些事儿 在密码学领域,Keccak算法就像一位低调的瑞士军刀——你可能每天都在使用它却浑然不觉。当你在以太坊钱包里查看账户地址时,当你的浏览器与网站建立TLS 1.3加密连接时&#…...

别再让SMB裸奔了!Windows Server 2019/2022强制启用SMB签名的完整配置流程

企业级SMB签名配置实战:从风险原理到域环境批量部署 想象一下这样的场景:财务部的共享文件夹突然出现异常转账记录,而所有操作日志都显示"合法访问"。事后调查发现,攻击者仅用15分钟就通过伪造SMB会话篡改了报价单——这…...

从ASF高效获取Sentinel-1雷达影像:一站式下载与预处理指引

1. Sentinel-1雷达影像基础认知 第一次接触Sentinel-1数据时,我和很多初学者一样被各种专业术语搞得晕头转向。后来在实际项目中反复使用才发现,理解这些基础概念对后续数据获取和预处理至关重要。Sentinel-1是欧空局哥白尼计划中的雷达卫星星座&#xf…...

告别窗口遮挡烦恼:3种方法让PinWin成为你的桌面效率助手

告别窗口遮挡烦恼:3种方法让PinWin成为你的桌面效率助手 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 你是否经常在写代码时需要参考文档,却频繁被其他窗口遮…...

从石头剪刀布到Nim游戏:用Python代码理解博弈论里的必胜策略

从石头剪刀布到Nim游戏:用Python代码理解博弈论里的必胜策略 博弈论并非遥不可及的数学理论,它隐藏在我们熟知的童年游戏里。想象一下,当你和朋友玩石头剪刀布时,是否曾思考过是否存在必胜策略?或者在井字棋游戏中&…...

HeyGem数字人系统批量处理教程:高效制作企业宣传视频

HeyGem数字人系统批量处理教程:高效制作企业宣传视频 1. 系统介绍与核心功能 HeyGem数字人视频生成系统是一款基于AI技术的智能视频合成工具,能够将音频与视频完美结合,生成口型同步的数字人视频。这个批量版WebUI版本经过二次开发&#xf…...

internlm2-chat-1.8b效果惊艳:中文古籍标点自动添加+白话翻译对比展示

internlm2-chat-1.8b效果惊艳:中文古籍标点自动添加白话翻译对比展示 你是不是也对那些没有标点的古文感到头疼?竖排、繁体、无句读,读起来磕磕绊绊,意思全靠猜。最近,我在体验一个轻量级的AI模型——InternLM2-Chat-…...

告别枯燥配置!用Odin的ValidateInput和ValueDropdown为你的Unity游戏数据加上“智能校验”

告别枯燥配置!用Odin的ValidateInput和ValueDropdown为你的Unity游戏数据加上“智能校验” 在游戏开发中,数据配置往往是策划与程序员之间最频繁的"战场"。想象这样一个场景:策划正在为RPG游戏设计一个复杂的技能系统,需…...

PyTorch 2.6镜像保姆级教程:3步完成GPU加速环境配置

PyTorch 2.6镜像保姆级教程:3步完成GPU加速环境配置 你是不是刚拿到一台新服务器,想快速搭建一个能跑深度学习的GPU环境,结果被各种驱动、CUDA版本、环境依赖搞得头大?或者你只是想快速验证一个PyTorch模型,却花了大半…...

REX-UniNLU与Typora文档智能分析

REX-UniNLU与Typora文档智能分析 1. 引言 在日常工作中,我们经常需要处理大量的Markdown文档。无论是技术文档、项目报告还是学习笔记,如何快速理解和分析这些文档内容一直是个挑战。传统的文档分析需要人工阅读和整理,费时费力且容易出错。…...

Phi-4-mini-reasoning实战教程:3步部署数学与逻辑推理Web服务

Phi-4-mini-reasoning实战教程:3步部署数学与逻辑推理Web服务 1. 认识Phi-4-mini-reasoning推理模型 Phi-4-mini-reasoning是一款专为推理任务优化的文本生成模型,特别擅长处理数学题、逻辑题等需要多步分析和精确结论输出的场景。与通用聊天模型不同&…...

HunyuanVideo-Foley 开发环境搭建:使用MobaXterm高效管理远程Linux服务器

HunyuanVideo-Foley 开发环境搭建:使用MobaXterm高效管理远程Linux服务器 1. 为什么选择MobaXterm 对于Windows开发者来说,管理远程Linux服务器一直是个头疼的问题。传统的PuTTY虽然能用,但功能单一;Xshell虽然强大,…...

Java 面试题精讲:在分布式系统中集成 Stable Yogi 模型的设计思路

Java 面试题精讲:在分布式系统中集成 Stable Yogi 模型的设计思路 最近在面试高级Java工程师时,我特别喜欢问一个开放性的架构设计题:“假设我们要在一个大型电商平台的微服务架构里,集成一个类似Stable Diffusion的AI图像生成模…...

告别死板界面!Nanbeige 4.1-3B Streamlit WebUI极简版,一键搭建二次元对话助手

告别死板界面!Nanbeige 4.1-3B Streamlit WebUI极简版,一键搭建二次元对话助手 1. 引言:当极简设计遇上AI对话 如果你曾经尝试过本地部署大语言模型的Web界面,可能会被那些拥挤的侧边栏、死板的方形头像和单调的聊天气泡劝退。传…...

次元画室Python入门实践:用10行代码实现你的第一张AI绘画

次元画室Python入门实践:用10行代码实现你的第一张AI绘画 你是不是也刷到过那些酷炫的AI绘画作品,心里痒痒的,觉得这技术真神奇,但又感觉离自己很远?是不是觉得要玩转AI绘画,得先学会复杂的软件操作&#…...

SDMatte在移动端App的集成方案:云端推理与本地缓存的平衡

SDMatte在移动端App的集成方案:云端推理与本地缓存的平衡 1. 移动端图像处理的新挑战 最近几年,移动端图像处理需求呈现爆发式增长。从简单的滤镜应用到复杂的背景替换、人像美化,用户对实时性和效果质量的要求越来越高。SDMatte作为一种先…...

MPU6050的DMP采样率到底怎么调?从200Hz到5ms延迟的配置避坑指南

MPU6050的DMP采样率到底怎么调?从200Hz到5ms延迟的配置避坑指南 当你在手势识别项目中配置MPU6050时,是否遇到过这样的困惑:明明在代码里设置了mpu_set_sample_rate(200),但用示波器测量中断引脚却发现间隔忽长忽短?或…...

别再只调sklearn默认参数了!手把手教你优化SVR回归模型的5个关键步骤

突破SVR模型性能瓶颈:5个被低估的调参实战策略 当你的支持向量回归(SVR)模型表现平平,准确率卡在某个阈值无法突破时,可能正陷入"默认参数陷阱"。许多机器学习实践者习惯直接调用sklearn的SVR()默认设置&…...

避坑指南:在PlatformIO上为ESP32-S3移植LVGL、AI语音和摄像头时,我遇到的5个典型问题

ESP32-S3多功能开发实战:从LVGL优化到AI语音集成的避坑指南 在物联网和嵌入式开发领域,ESP32-S3凭借其强大的双核处理能力和丰富的外设接口,成为智能终端设备的首选平台之一。但当我们将LVGL图形库、AI语音交互和摄像头功能集成到同一个项目中…...

Python测试代码如何实现自解释_使用pytest描述性命名规范

测试函数名须以test_开头并用下划线连接完整动宾短语,如test_calculate_total_returns_zero_for_empty_cart;参数化用pytest.mark.parametrize替代重复函数;断言需具体明确;fixture应以名词命名,体现被构建对象而非构建…...

AI写代码真的比人类快3.7倍?2026奇点大会闭门测试数据首次公开:12类真实业务场景下代码正确率、可维护性、安全漏洞率三维对比

第一章:2026奇点智能技术大会:AI代码对比 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AI原生编码”专项评测赛道,聚焦大模型在真实工程场景中生成、理解与优化代码的能力。评测覆盖Python、Go、Rust三类主流语言&…...

如何高效备份QQ空间历史说说的完整指南

如何高效备份QQ空间历史说说的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字信息时代,个人数据的安全备份变得日益重要。GetQzonehistory作为一款开源工具&…...

Sketch Measure终极指南:3分钟掌握高效设计标注与规范生成

Sketch Measure终极指南:3分钟掌握高效设计标注与规范生成 【免费下载链接】sketch-measure Make it a fun to create spec for developers and teammates 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-measure 你是否厌倦了在Sketch中手动标注设计尺…...

如何在5分钟内免费部署本地AI写作助手:KoboldAI完全指南

如何在5分钟内免费部署本地AI写作助手:KoboldAI完全指南 【免费下载链接】KoboldAI-Client For GGUF support, see KoboldCPP: https://github.com/LostRuins/koboldcpp 项目地址: https://gitcode.com/gh_mirrors/ko/KoboldAI-Client 你是否渴望拥有一个完全…...

Calibre中文路径保护插件:终极解决方案告别拼音路径困扰

Calibre中文路径保护插件:终极解决方案告别拼音路径困扰 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文(中文)命名 项目地址:…...

Zephyr测试实战:从ztest用例编写到twister自动化验证

1. Zephyr测试框架概述 第一次接触Zephyr测试框架时,我完全被它强大的功能震撼到了。作为一个嵌入式开发者,我们经常需要在资源受限的环境下进行代码验证,而Zephyr提供的ztest单元测试框架和twister自动化测试工具,简直就是为嵌入…...

告别复制卡!手把手教你用92HID623CPU V5.00系统给小区门禁卡加密发卡(附防锁卡指南)

92HID623CPU V5.00系统实战:打造防复制门禁卡的完整指南 最近不少物业管理员都在头疼一个问题——传统IC卡太容易被复制了。随便找个街边小店,花个十块钱就能复制一张门禁卡,小区的安全性形同虚设。我去年接手的一个高端小区就遇到过这种情况…...

别再让FIN_WAIT_2拖垮你的服务器:Linux内核参数调优实战(附完整sysctl.conf配置)

从线上故障到根治方案:FIN_WAIT_2状态深度调优指南 凌晨3点,服务器监控大屏突然亮起刺眼的红色警报——某电商平台核心服务器的TCP连接数在15分钟内暴涨300%,内存占用突破90%阈值。运维团队紧急登录服务器,当netstat -ant | grep …...

告别手敲代码!这10个Dynamo节点包,让你的Revit建模效率翻倍(附保姆级安装指南)

10个Dynamo节点包:让Revit建模效率提升300%的实战指南 在BIM工程师的日常工作中,Revit建模往往伴随着大量重复性操作和数据处理任务。传统的手动操作不仅效率低下,还容易出错。而Dynamo作为Revit的可视化编程插件,正逐渐成为提升工…...

告别环境报错!手把手教你为《深入理解计算机系统》第三版(CSAPP 3e)在Ubuntu 20.04/WSL2下编译专属库

告别环境报错!手把手教你为《深入理解计算机系统》第三版(CSAPP 3e)在Ubuntu 20.04/WSL2下编译专属库 最近在WSL2环境下学习《深入理解计算机系统》(CSAPP)时,发现官方代码包直接编译总会报错。经过多次尝试…...