2009年3月7日 星期六

Diffie-Hellman的弱点

准备密码技术课程的PPT时,想给听众解释一下DH的计算方法。于是在网上找到几幅图,出自Behrouz Forouzan先生的经典著作《密码学与网络安全》。他将DH画得淋漓尽致,几乎无需任何文字说明。贴上来留着以后用。

图中的p是一个大素数,g是它的原始根。x和y分别是两端各自选取的随机数,分别作为R1和R2的离散对数,并满足大于等于0,小于等于p-1。K是双方最终计算出的用于数据加密时使用的工作密钥。





DH易受离散对数攻击和中间人攻击,但如果p很大,计算离散对数很难。然而中间人攻击却非常容易。如图:



一直没弄明白对DH进行中间人攻击究竟怎么做,现在终于清楚了。之前我总想着让爱丽丝和鲍勃还有中间人伊夫,这三者都使用同一个密钥。没想到在伊夫那里维护两个密钥来进行攻击,惭愧惭愧。

站对站协议用数字签名解决DH易受中间人攻击的问题,如图:

经典技术书籍中的图一般都比文字更经典,画得简明精巧。

标签:

2009年2月22日 星期日

10年前和20年前的玩具



10年前我最好的玩具,就是这台笔记本电脑。CPU主频400MHz,硬盘6GB。最初内存只有64MB,后来我找到一条128MB的给它装上,当前内存为192MB。它已为我勤勤恳恳零故障工作了10年以上。当初它预装的是Windows 98,现在它运行着基于Xubuntu的Hiweed Linux。看电影或上网已经卡得不太行了,但文字编辑,听音乐,甚至写点小程序,都没问题。大家都有自己的笔记本,早已没人用它,只是它装了我很多的回忆。看到它能让人想起那时候的一个个不眠之夜,对计算机软件的热情。于是它一直被留在父母家中,作为一个音乐播放机,或是一种见证。和我那把多年不弹的六弦琴享受同等的养老待遇。



20年前我最好的玩具,就是这个舅舅送的智力拼图。今年春节拿了出来,我,老婆,还有我的母亲,三个人把它拼了起来。后来她们二人罢工睡觉去了,作为婆媳关系桥梁的我,独自坚持将它完成。这么多片经过了这么多年,只少了图中左侧边缘的那一片,保存还算完整。恩,十全九美。

2009年2月7日 星期六

Thinkpad T61指纹仪过热问题

在系统登录或做系统管理任务时,用刷指纹来代替输入长长的密码,方便快捷,又能减轻手指的疲劳。在公共场合或办公区使用计算机时,为了信息保密,人离开机器后必须锁定屏幕。这早已成为我多年的习惯。然而Thinkpad T61使用Ubuntu8.04,出现锁定屏幕后指纹仪过热的问题。

按快捷键或其他任意方式锁定屏幕后,指纹仪不停地发热,越来越热,十几分钟后热得无法触摸。我担心它会损坏,因此很长时间在办公室的时候不用Ubuntu。Google此问题之后,没找到解决的办法。本想在Ubuntu的launchpad上报告此Bug,却发现早已有人先我一步,但却没人提供答案。订阅该帖几个月后,近日终于收到邮件,有人回复,提供了解决方法。原来thinkwiki上早已有人对此作了详尽说明。我想翻译成中文,置此备忘。

点击这里查看原文

修复指纹仪过热

如果你注意到你的指纹仪偶尔会变得很热,那你也许会对这一节的内容有兴趣。感谢Tino Keitel,他通过linux-thinkpad邮件列表给了我这个解决方案。

首先我们需要检测指纹仪是否没有处在自动挂起模式。
打开一个终端并运行:

for i in `find /sys/devices/*/*/usb* -name level` ; do echo -n "$i: " ; cat $i ; done

我们关心的是那些状态为“on”的设备,并且我们需要检测看是否其中之一就是指纹仪。所以对这些设备每一个都运行一次类似这样的命令:

cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idVendor
0483(这是命令输出的结果)

cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idProduct
2016(这是命令输出的结果)

以上命令中要用状态为“on”的那些设备所对应的路径,然后和lsusb命令的输出结果进行对比。举个例子:

lsusb的输出结果:Bus 001 Device 004: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader

这正和上面命令的输出结果(0483:2016)相匹配。一旦检测完你指纹仪的路径,然后就用su -变成root并且执行:

echo "auto" > /sys/<设备的路径>/power/level

之后,指纹仪应该就处于“自动挂起”模式,并且再也不会变热了。而且它仍能正常工作。
这只对当前会话有效。如果你想让这个改动持续有效并且已经安装了sysfsutils,则编辑文件/etc/sysfs.conf并加入这行:

<设备的路径>/power/level = auto

对于前面的例子,则应该是

devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/power/level = auto


另外一种方法,你可以安装一个初始化脚本:

sudo gedit /etc/init.d/ReaderNoMoreHot

粘贴以下内容到其中:

#!/bin/bash
#
echo "auto" > /sys/<设备的路径>/power/level

保存并关闭。然后:

sudo chmod 755 /etc/init.d/ReaderNoMoreHot
sudo update-rc.d ReaderNoMoreHot defaults 90

标签: ,

2008年11月21日 星期五

冷兵器



蚂蚁牌第三代产品,做工精良,令我喜欢。



可以收起来,携带方便。



可以拆卸,方便隐藏和更换备件。

2008年7月10日 星期四

Thinkpad T61指纹登录Ubuntu

将Ubuntu 8.04安装到Thinkpad T61上,声卡显卡网卡无线网卡ACPI等大部分硬件都直接支持,包括Fn系列快捷键,令我满意。开源的显卡驱动提供了良好的2D显示。系统启动后,受限驱动管理器自动提示需启用显卡的3D驱动,启用后桌面特效即可打开,令我满意。
唯有指纹仪没能用起来,稍有遗憾。

遂Google之,发现方法无数,多次尝试无效。
反复揣摩,终于完成。gdm登录或其他需要sudo,gksu的时候,无需再输口令,指纹一刷即可。非常方便快捷。方法总结如下:

1. 从源中搜索thinkfinger,发现三个软件包,装之。
sudo apt-get install thinkfinger-tools libpam-thinkfinger libthinkfinger0
网上有人说自己编译安装,我觉得何苦呢。

2. 启用指纹功能
sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable
网上有文说需手动修改某些配置文件,我打开那配置文件后却发现早已改好,无须人工干预。

3. 重启系统
否则进行后续步骤时可能会报如下三种错误:
Undefined error occured (0xff).

Warning: usb_bulk_read expected to read 0x40 (read 0x10 bytes).
亦或
Could not acquire fingerprint (communication with fingerprint reader failed)
无数人报了以上这三种错误,我也都一一遇到了。但最终发现此步骤时重启一下,便好了。

4. 录制指纹
sudo tf-tool --acquire
网上有文说此处不加sudo,但我若不加sudo,总是失败。于是只好先sudo录之,然后把生成的指纹文件的属主由root改为当前用户。例如我的用户名为sanhe,便如此输入:
sudo chown sanhe:sanhe ~/.thinkfinger.bir

5. 检验指纹
tf-tool --verify
此处不加sudo,因为那个指纹的文件已经被改为当前用户的了。若提示验证通过,则至此设置全部完成。

网上有文说之后还得用
tf-tool --add-user添加用户,然而我的tf-tool只有--acquire和--verify等参数,根本没--add-user这参数,不知何来此说。总之完成这5步然后重启,指纹就可用了。
记录于此,以示他人。

标签: ,