Cryptography

共 37 篇文章。

新的 arc4random_uniform 实现

• Kernel

本月初, Robert Clausecker 替换了 FreeBSD的 arc4random_uniform(3)。

arc4random_uniform(3) 是 arc4random(3) 之上封装的一个生成一个较小范围伪随机数的函数。arc4random(3) 采用密码学安全的伪随机数生成一个在 32-bit 范围,即 [0, 232−1][0,\ 2^{32}-1] 内均匀分布的伪随机整数,此处的随机分布是依靠对称加密算法(目前采用的是 Chacha20)中用于实现加密的伪随机置换(Pseudorandom Permutation)来保证的。

阅读全文… ( 本文约 3403 字,阅读大致需要 7 分钟 )

采用 Ed25519 的 DKIM 签名

• Security

Ed25519 是一种高性能的公钥签名系统。和 RSA 相比,同等强度的 Ed25519 的密钥长度要比 RSA 短很多,此外,软件实现的 Ed25519的验证速度也比同等强度的 RSA 快很多。

尽管早在2018年 RFC 8463 Section 5就已经将 RFC 6376 Section 3.3 修正为要求验证者必须支持 Ed25519 验证,然而时至今日主要的邮件服务提供商中,包括 Google 的 Gmail 和 Microsoft 的 Outlook.com 以及 Apple 的 iCloud都还不支持验证 Ed25519 DKIM 签名。ProtonMail 支持 Ed25519 的 DKIM 签名,但它并不使用Ed25519 签名向外发出的邮件。

阅读全文… ( 本文约 987 字,阅读大致需要 2 分钟 )

geli(8)的HMAC设计

• Kernel

读到哪算哪的先记一笔。

geli(8)在启用了数据完整性检测的时候采取的设计是将HMAC数据保存在同一扇区中,换言之它在保存数据时,物理扇区(通常是512字节)中占用了32字节来保存HMAC数据。

阅读全文… ( 本文约 590 字,阅读大致需要 2 分钟 )

FreeBSD -CURRENT随机数发生器问题

• Kernel, Security

今天 John-Mark Gurney 修正了一个影响过去4个月左右的 FreeBSD -CURRENT 的随机数发生器问题,具体受影响的版本是 r273872(引入问题)到 r278907 (修正)。

由于问题只影响 -CURRENT,因此我们不会就此发表安全公告。

阅读全文… ( 本文约 407 字,阅读大致需要 1 分钟 )

Intel RDSEED指令

• Security

今天看到 John Baldwin commit 的这个 r266391 增加了相关支持。

RDSEED 和 RDRAND 的区别是 RDRAND 采用的是 128-bit AES 密钥的 CTR-DRBG,而 RDSEED 则是直接从真随机数发生器中获得输出(两者并不是直接使用真随机发生器的输出,这些输出是做过 AES-CBC-MAC 处理的,防止外界通过观测输出了解内部运行的细节),较慢,后者具备 multiplicative prediction resistance 特性。

阅读全文… ( 本文约 352 字,阅读大致需要 1 分钟 )

基于Asrock C2750D4I的全加密存储

• Hardware

去年第四季度的时候,在网上看到 华擎科技 推出了一款基于 Intel Atom C2750 SoC 的主板, Asrock C2750D4I,感觉很赞,于是立即和华擎科技取得了联系(当时这款主板还没进入量产),并着手开始了测试等工作。这张主板的重要特色包括:

  • mini-iTX尺寸
  • CPU支持Intel AES-NI,加密加速
  • 提供了两个千兆以太网口
  • 支持ECC内存(更重要的是,采用的是台式机和服务器常见的4x240-pin DDR3 DIMM规格,不像同类产品通常使用的是204-pin的SO-DIMM,这一点可以节省很多成本)
  • 提供了8个SATA III 6.0Gbps接口和4个SATA II 3.0Gbps接口
  • 支持IPMI并提供了独立网口

此处强行插入一条广告: 我厂 目前这一代的 FreeNAS Mini 采用了这张主板,组装好的产品可以通过 Amazon 购买,我厂每年都会将一部分利润捐给 FreeBSD 基金会,如果先 在 smile.amazon.com 注册支持 FreeBSD 基金会,并使用前述链接, Amazon 公司还会再捐出 0.5% 的金额给 FreeBSD 基金会。

目前这张主板已经进入了量产阶段,因此也可以从其他零售渠道获得相关组件自行组装。

阅读全文… ( 本文约 1384 字,阅读大致需要 3 分钟 )

记一下PGP密钥的转移过程

• Security

今天上午,我和现任 FreeBSD 安全长官 Simon 完成了一次 PGP 密钥的转移,这里记一下过程。

由于这个密钥用于签署安全公告和声明等等,因此非常重要。发送方对于密钥做了三重加密:第一重是 GnuPG 本身的密钥密码;第二重是 AES;第三重是我本人的 PGP 公钥。加密后的结果放到了一台可信的中转服务器上,然后以安全方式取走;用我的 PGP 密钥解密之后,通过两个不同的渠道分别发送 AES 密钥;最后一步的密码采用加密方式发给我,我在解密成功之后,修改密码,并销毁全部中间文件。

阅读全文… ( 本文约 235 字,阅读大致需要 1 分钟 )

检测中间人攻击

• Security

今天在邮件列表里看到 John Nagle (就是发明 TCP Nagle 算法的 那个 John Nagle)提到希望 OpenSSL 提供一些帮助自动检测中间人攻击的 方法。简单地说,因为中间人攻击会改变双方看到的加密流(密钥变了),因此,如果上层协议包含了加密流的某些特征,攻击者想要实施中间人攻击的成本就会大大增加。他同时举了一个例子,一种早期的加密电话会在话机上显示从密文开始的部分计算的两位数字,而通话双方则通过通话来确认数字相同,这样,中间人攻击的实施者就必须解析语音并替换掉相关的字词来避免被发现。

简单的例子是,比如准备发出 HTML/XML 之前,首先发出它们在加密之后的密文的 hash。攻击者如果简单地截获并重新加密文档,则攻击会被立即发现;如果缓冲并重新计算结果,必然会引入延迟;如果事先准备好文件并做好计算,则需要在看到文件之前就准备好这些资料(不过实际应用中,攻击者很可能会选择这么做)。这些都会增加实施中间人攻击的困难。

阅读全文… ( 本文约 401 字,阅读大致需要 1 分钟 )

gmpy/离散对数

• Security

前几天做一个解离散对数的题用到了 gmpy,它是 GMP 的 Python 封装,用来算大数。

这里记两笔。首先是大整数需要用 mpz 对象,例如:

p = mpz(13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084171)

判断大数是否是质数:is_prime(p) (求离散对数其实用不着)

求逆元 x−1x^{-1}:invert(x, p)。例如, y = invert(x, p) 则 (x∗y)mod  p=1(x * y) \mod p = 1

阅读全文… ( 本文约 690 字,阅读大致需要 2 分钟 )