看到一片评论文章,忍不住说说

针对近期网站用户密码泄露事件,本文分析了一篇评论文章中关于哈希算法的误解,包括哈希算法的安全性来源、碰撞的概念及其对安全性的影响,并解释了为何不存在无碰撞的哈希算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继优快云600万用户密码泄露之后,又爆出天涯2000万用户密码泄露,传说还有其他一些网站密码泄露,不过多未经证实。

以我所知道的国内网站安全管理的平均水准而言,爆出这样的事情原不意外。但是一些对此事件的评论文章却很有意思,展现了很多东西。譬如这一篇:

黑客元老推演网络大泄密:有点挑战实名制意味


在文中,接受采访的安全人员有这样的说法:


龚蔚称,目前的加密算法,即哈希函数都是公开的,除非自己设计一个很好的能够避免出现“碰撞”的哈希算法,否则现有的大众哈希函数都可以通过“碰撞”的方式进行破解。


我不太清楚这是龚蔚先生的原话还是记者理解偏差,这段话的问题很多:

  1. 它暗示非公开的加密算法在安全性上优于公开的加密算法;
  2. 它认为存在碰撞是现有哈希算法的重大缺陷,碰撞将导致被破解;
  3. 这段话似乎提倡致力于开发“无碰撞”哈希算法。

关于1, 现代加密算法的安全性来自于算法本身,而不是对算法的保密。也只有公开的,历经考验的算法才能保证安全。

关于2、3,首先,哈希算法的正式名称是单向散列算法。哈希算法不是加密算法。这种算法在计算机安全中主要用于认证,无法用于传递信息。

既然是单向散列算法,通常意义的被破解——由哈希结果还原出原文——根本就不可能,因为哈希本身丢失了信息;

既然是单向散列算法,必然存在不同的输入产生相同的输出。因为哈希的可能结果数远远小于可能的不同输入数。

因此,研究“无碰撞”的哈希算法,无异于痴人说梦。

而哈希算法被破解,也与碰撞的存在性无关。我不太确定龚蔚这里提到的被破解是何种意义上被破解,前面已经指出,还原原文是不可能的。但是,碰撞的确可以被用于攻击认证过程,如果该认证只是简单地校验密码的哈希值。但这是因为这种认证方法存在设计缺陷,而不说明哈希算法有问题。只有当一个哈希函数存在快速构造碰撞对的时候,这个哈希函数才会被认为有问题。王小云的团队在2004年的国际密码讨论年会上得到全场起立鼓掌,正是因为他们发现了快速构造MD5哈希碰撞的方法。


普通人对于加密和安全有种种误解并不稀奇,作为接受采访的安全工作者对于加密/哈希算法存在如此基本的认识错误,实在让人啼笑皆非。

以上是评论文章中的知识性错误。更典型的,更少有人提及的,则是采访者与被采访者的姿态。

  • 似乎计算机安全(或者黑客攻击)就是依赖一些深不可测的而又秘不外传的技艺;
  • 面对这样的事件似乎只有网站管理者需要反思,安全工作者或者黑客所要做的就是幸灾乐祸——现在他们该意识到我们身怀的绝技有多么重要了吧?!



Flutter是一种流行的开源跨平台移动应用程序开发框架,由Google推出。它使用Dart语言,可以为iOS和Android平台创建高性能、美观的应用程序。在本文中,我们将介绍Flutter的基础知识,包括安装、开发工作流程、UI设计和构建应用程序。 安装Flutter 首先,我们需要在计算机上安装Flutter。Flutter支持Windows、Linux和MacOS平台。安装Flutter的步骤如下: 1. 在Flutter官网上下载Flutter SDK。 2. 将下载的Flutter SDK解压缩到本地目录。 3. 配置Flutter环境变量,将Flutter SDK添加到系统路径中。 4. 运行flutter doctor命令,检查Flutter安装是否成功。 开发工作流程 Flutter开发的工作流程如下: 1. 创建Flutter项目:我们可以使用命令行工具创建一个新的Flutter项目。运行flutter create命令,指定项目名称和路径。 2. 编辑代码:使用您喜欢的编辑器打开项目文件夹,编辑Dart代码文件。Flutter应用程序由一组小部件组成,这些小部件可以在树形结构中嵌套在一起。 3. 运行应用程序:使用命令行工具运行应用程序,或者使用编辑器中的Flutter插件运行应用程序。应用程序将在模拟器或连接的设备上运行。 UI设计 Flutter提供了一组小部件,可以用于构建美观的UI界面。小部件是Flutter应用程序中的基本构建块。每个小部件都有自己的属性和方法,可以用于构建各种UI元素。 以下是Flutter中常用的小部件: 1. 文本(Text):用于显示文本内容。 2. 图像(Image):用于显示图像。 3. 按钮(Button):用于创建交互式按钮。 4. 输入框(TextField):用于接收用户输入。 5. 列表(ListView):用于显示列表数据。 6. 网格(Gridview):用于显示网格数据。 构建应用程序 以下是构建Flutter应用程序的基本步骤: 1. 创建Flutter项目:使用命令行工具创建一个新的Flutter项目。 2. 编辑代码:使用您喜欢的编辑器打开项目文件夹,编辑Dart代码文件。 3. 添加小部件:使用Flutter提供的小部件来创建UI界面。 4. 运行应用程序:使用命令行工具运行应用程序,或者使用编辑器中的Flutter插件运行应用程序。 5. 测试和调试:测试应用程序,并使用调试器解决可能存在的错误。 总结 通过本文,我们了解了Flutter的基础知识,包括安装、开发工作流程、UI设计和构建应用程序。Flutter提供了丰富的小部件和工具,可以帮助我们轻松地创建高性能、美观的移动应用程序。如果您有兴趣学习Flutter,可以查看Flutter官方文档和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值