“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
SHA-1 碰撞首次实现:我们如何破解了二十年历史的加密哈希
SHA-1 哈希碰撞首次被实际攻破,宣告其作为安全哈希函数的历史使命终结。
2017 年 2 月 23 日,Google 安全博客与荷兰 CWI 研究所联合宣布了一个里程碑式的安全事件:他们成功地制造了世界上第一例实用的 SHA-1 哈希碰撞。这意味着,两个内容完全不同的 PDF 文件,其 SHA-1 哈希值却完全相同。这一成果不仅证明了 SHA-1 先天存在的数学弱点可以被现实世界中的计算资源所利用,更是对整个行业的一次紧急警告:是时候彻底告别 SHA-1 了。
什么是哈希碰撞?
要理解这一事件的重要性,我们需要先了解哈希函数。哈希函数(如 SHA-1)是一种将任意长度的数据(如文档、二进制文件或网站证书)压缩成固定长度摘要的算法。它如同密码学中的“瑞士军刀”,无所不在——从浏览器安全、代码库管理到存储去重,都有它的身影。
对于安全哈希函数,存在两个不可变的核心要求:
- 抗原像性:给定输出,无法反推输入。
- 抗碰撞性:理论上寻找两个不同输入,使得其哈希值相同,在计算上应当是不可行的。
所谓“碰撞”,就是指两个不同的数据片段(文档、二进制、证书等)经过哈希后产生了相同的摘要。对于安全的哈希函数,碰撞不应发生。然而,当算法存在缺陷(如 SHA-1),或随着计算能力的提升,这一要求可能被攻破。攻击者利用碰撞,可以欺骗那些依赖哈希值来识别文件真伪的系统,让恶意文件伪装成良性文件。例如,两份条款差异巨大的保险合同可能被赋予相同的哈希值,而系统会以此为凭据认为它们完全一致。
突破的前夜:从理论到实践
早在 2013 年,密码学家 Marc Stevens 就发表了一篇论文,勾勒出生成 SHA-1 碰撞的理论路径。但理论到实践之间,隔着巨大的鸿沟。Google 与 CWI 研究所的研究人员决心将这份蓝图落到实处。
他们选择了一个巧妙的载体——PDF 文件。PDF 格式具有独特的灵活性,允许在保持视觉内容不变的情况下嵌入大量填充数据,这为构造碰撞提供了可操作的结构空间。团队首先设计了一个精心构造的 PDF 前缀,就像预置了一个“碰撞陷阱”,使得后续可以生成两份视觉内容完全不同的文档,但它们的 SHA-1 哈希值却能完全吻合。
史上最大规模计算之一
整个破解过程分两阶段进行,其计算规模在当时堪称史无前例:
- 总计算量: 9,223,372,036,854,775,808 次 SHA-1 计算。这个名字本身就很熟悉——2 的 63 次方,接近 922 亿亿次。
- 第一阶段(用于生成正确的差分路径):相当于消耗了 6,500 年的 CPU 时间。
- 第二阶段(用于搜索碰撞):相当于消耗了 110 年的 GPU 时间。
上述数字已经够惊人,但值得一提的是,即便如此,这种攻击仍比暴力破解(brute force)要快 超过 100,000 倍。暴力破解(即随机碰撞直到找到冲突)即使对于 SHA-1 来说,依然是不现实的——其复杂度约为 2 的 80 次方,需要无法想象的算力。而这次的攻击,巧妙利用了 SHA-1 密码学构造中的弱点(具体涉及压缩函数中的近碰撞路径),将复杂度大幅降低。
技术原理简析(深度拓展)
SHA-1 算法基于 Merkle-Damgård 结构,其核心是一个压缩函数,将固定大小的输入块和内部状态混合处理。SHA-1 被批评的弱点主要集中在它的压缩函数存在已知的碰撞路径(differential path)。
最早的碰撞理论攻击由 Wang 等人在 2005 年提出,但他们的攻击对计算资源的要求在当时被认为是天文数字。而这次 Google 与 CWI 团队则实现了(近乎实际可行的)攻击,其关键在于:
- 选择前缀碰撞攻击(Chosen-prefix collision attack):攻击者可以自由选择两块不同的消息前缀,然后通过填充块将两个内部状态引导至预定的碰撞状态。
- 利用 GPU 和分布式计算:攻击第一阶段(寻找必要的近碰撞块对)需要海量并行计算。研究团队开发了专门的 GPU 代码并在 Google Cloud 上部署了超过 10,000 个核心来运行。这相当于利用 Google 的数据中心作为一台超级计算机,全天候运转了数个月。
实际攻击演示与影响
作为攻击效果的证明,团队公开了两个内容不同但 SHA-1 哈希值完全一致的 PDF 文件。这两个文件分别呈现不同颜色的页面,但哈希摘要(SHA-1:d3e4024d6e98a2b0a6c2649a5e8b0e0a 之类示例值)完全一致。可以利用在线哈希计算工具验证这一点。
此项攻击直接宣告了以下场景的不安全性:
- 依赖 SHA-1 的代码版本控制系统(如 Git)理论上可能被操纵提交恶意代码,但不易被察觉。
- 依赖 SHA-1 的文件去重系统可能被绕过,以存储冲突文件来污染数据。
- 更紧要的是,TLS 证书链中若使用 SHA-1 签名,攻击者有可能伪造一个与合法证书哈希一致的恶意证书。虽然证书链中已逐步淘汰 SHA-1,但这一事件再次证明了淘汰的紧迫性。
应对措施与行业呼吁
Google 安全团队随即采取了一系列缓解措施:
- 在 Gmail 和 GSuite 中部署了碰撞检测机制,以防攻击被用于发送恶意附件。
- 向外界公开一个免费的检测系统(基于 PDF 结构分析),帮助其他组织和用户识别自己的文件是否可能构成了碰撞攻击。
文章最后,Google 强烈呼吁业界加速迁移到安全哈希算法,如 SHA-256 和 SHA-3。早在 2014 年,Chrome 团队就开始计划逐步淘汰 SHA-1 签名证书,而这次实际攻击的落地,让这一进程变得刻不容缓。
结语
本次成果是 CWI 研究所与 Google 研究团队(安全、隐私与反滥用部门)长期合作的结晶。团队核心成员包括:
- Marc Stevens:理论攻击的先驱,主导了碰撞路径的设计
- Elie Bursztein:Google 安全团队领队,负责协调与基础设施
- Ange Albertini:开发了 PDF 攻击构造方法
- Pierre Karpman:负责密码分析及 GPU 实现
- Yarik Markov:开发了分布式 GPU 计算代码
- Alex Petit Bianco:实现了碰撞检测器以保护用户
- Clement Baisse:确保了长达数月的计算的可靠性
根据 Google 漏洞披露政策,他们在确认攻击后等待了 90 天才逐步公开攻击代码,以避免被立即滥用。
这一事件并非简单地将一个 20 年前的算法钉入历史,而是再次提醒我们:安全是一个持续演进的动态过程。今天的“安全哈希”,可能成为明天的牺牲品。选择底层算法时,必须保持足够的远见与冗余。
原文链接:https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html