如何使用dm-crypt和LUKS加密硬盘 (转)

加密硬盘技术很有用,转载一下,将来一定用的着:
http://www.rainking.cn/blog/?p=17#comment-641

申明:

本文已发布于《Linuxer》电子杂志第十期。转载和使用请与Rainking联系,联系方式:http://www.rainking.cn/blog/?page_id=4。Linuxer主页:www.linuxer.cn

介绍
动机
如今,安全保密工作已经成为我们日常生活中的关键要素,无论有意还是无意。安全保密工作的范围非常宽广,其中有一项就是计算机安全保密。

在这个教程中,我将介绍如何在(X)Ubuntu Feisty下使用dm-crypt和LUKS加密整个硬盘。在此文的撰写过程中,我搜集了网上很多信息和教程,然后将它们整理到一起,这些信息和教程可以通过以下的方式访问到:
http://www.hermann-uwe.de/blog/howto-disk-encryption-with-dm-crypt-luks-and-debian
https://systemausfall.org/wikis/howto/CryptoPartitionHowTo
– irc.freenode.org的ubuntu频道

警告
这个教程会摧毁硬盘上的所有数据,所以建议你在操作中选择硬盘的时候非常的仔细和小心。不要用它来加密你安装Linux的硬盘。其实,加密一个硬盘的初衷本来就是为了数据存储。

一些法律相关事项
有很多加密方法,其中最常提到的是提供了极大plausible deniability的true-cypt双层加密方法。(Rainking注:这里plausible deniability非常不好翻译,故保留英文原文,方便大家理解。据我的研究,plausible deniability是指做了坏事而能不留证据的行为,比如用电击对人进行体罚而不留下伤口)这意味着如果某人看见你有一块很大的硬盘但是只有一点点资 料在上面并且这些资料有点像被删除的数据,那么这个人完全有理由推断出这是一个加密的硬盘。这时候你可能就要被逼迫(被法官逼迫或者被坏人逼迫)交出解密 的方法。所以你可以交出加密低机密数据的解密方法而不交出加密高机密数据的加密方法。而逼迫你的人并不能确认你所解密的数据是不是整个硬盘的全部数据。 (Rainking注:关于true-cypt双层加密方法这里并没有篇幅详细说明,请读者自己研究^_^,不仔细研究了解一下,上述这段话可不好理解 噢)

但是,这并不一定是好事,因为一旦你使用了双层加密方式,那么别人将永远不会相信你给出了解密的所有关键字以解开第二层加密文件。这就使得使用双层加密的用户在某些时刻会陷入无法证明自己清白的境地。

不过plausible deniability对我来说并不重要。因为我生活在欧洲的一个认可欧洲人权宪章的国家。我拥有在面对任何法律情况都保持沉默的权利。

这意味着如果法庭传唤我让我给出解密加密数据的密钥的话,对我来说并没有什么法律意义。如果法庭硬是这么做了,我可以去斯特拉斯堡的欧洲人权法庭告它,并且有很大概率胜诉。

在某些国家,你需要对所有的通过你的互联网帐户传播的信息负责,哪怕你不知道这些信息被传播了或者你没有做任何事情去促使这些信息传播。这种情况下,你硬盘上的信息就不必要被作为证据了(当然了,要是能作为证据更好),这时候,加密的磁盘就不能保护你啦。

因此,我只把这篇文章的重点关注在并不提供高级plausible deniability 多层次加密的dm-crypt和LUKS上。

注:作为一个瑞士的法律研究生(Rainking注:!•#¥%……—*怪不得这家伙写得英文我看不懂呢!大家同情我吧!这篇文章实在太难翻 了!),我只是站在瑞士法律的角度看以上问题。在欧洲的其它国家,可能会有不同之处,但是保障人权自由的基本原则应该是相同的。而且我使用的语法和词汇可 能并不是完全符合英语标准的法律术语,但是基本意思应该是差不多的。总之就是不要把之上的所有陈述当作一个严格的司法解释就对了。

安装必要软件
我使用的Linux发行版本是Xubuntu Feisty。所以所述方法应该可以同样使用在所有Ubuntu版本和其它基于Debian的发行版本上。

安装软件很简单,在终端输入:
sudo aptitude install cryptsetup hashalot

准备你的硬盘
首先我们要在硬盘中加入随机的数据。这可以使得外人无法猜测到底硬盘上有多少隐藏数据。我使用的是dd命令实现添加随机数据的,这个操作需要一段时间,在终端输入:
sudo dd if=/dev/urandom of=/dev/HARDDISK
用你的实际硬盘名替换HARDDISK,比如:hda或者hdb或者sda或者sdb。
这将运行一段时间。我的运行结果如下:
hyper@xubi:/dev$ sudo dd if=/dev/urandom of=/dev/hda
dd: writing to `/dev/hda’: No space left on device
312581809+0 records in
312581808+0 records out
160041885696 bytes (160 GB) copied, 90679.8 seconds, 1.8 MB/s

安装一些内核模块
为了使用dm-crypt我们需要再安装一些内核模块,在终端输入:
sudo modprobe aes dm-crypt dm_mod

如果你希望它们在启动的时候被载入,请编辑/etc/modules,在终端输入:
sudo nano /etc/modules
然后在文件末尾加入如下内容:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with “#” are ignored.
fuse
lp
aes
dm-crypt
dm_mod

fuse和lp已经默认存在于我的文件中了,有可能你的文件中并没有这些行,或者有其它行,这不要紧,你只需要在末尾加上aes, dm-crypt和dm_mod就可以了。加完以后可以按下ctrl-x,然后NANO会问你是否需要保存修改的文件。按Enter键2次,一次确认保 存,一次确认文件名。(Rainking注:关于NANO的介绍和教程请参见以前的杂志)

创建加密盘
在终端输入以下命令以创建分区:
sudo cryptsetup luksFormat /dev/HARDDISK

映射加密分区
在终端输入以下命令映射加密分区:
sudo cryptsetup luksOpen /dev/HARDDISK DEVICENAME
现在加密分区已经映射到了/dev/mapper/DEVICENAME下

格式化加密分区
在终端输入以下命令格式化分区:
sudo mkfs.ext3 /dev/mapper/DEVICENAME

挂载分区
首先创建一个挂载点:
sudo mkdir /media/DEVICENAME
然后挂载分区到挂载点:
sudo mount /dev/mapper/HARDDISK /media/DEVICENAME

如果你因为某些原因卸载了分区,并希望之后再挂载它,你并不需要再次创建文件系统。你只需要在终端输入:
sudo cryptesetup luksOpen /dev/HARDDISK DEVICENAME
sudo mount /dev/mapper/HARDDISK /media/DEVICENAME

开机自动挂载
为了开机自动挂载分区,你需要编辑/etc/crypttab,在文件末段添加如下内容:
DEVICENAME /dev/HARDDISK none luks,check=ext2,retry=5
当然你需要把它添加入/etc/fstab文件,如下所示:
# CryptoDevices
/dev/mapper/DEVICENAME /media/HARDDISK auto defaults 0 0

在启动的时候,你需要输入加密设备的密码才能开机。你有最多5次机会输入密码,如果超过5次输入密码错误,系统将会不挂载加密设备启动。进入系统以后,你仍然可以手动的挂载它。

添加删除密钥
你可以为一个加密分区添加多个密钥或者删除这些密钥,添加密钥需要在终端输入:
sudo cryptsetup luksAddKey /dev/HARDDISK
删除密钥则在终端输入:
sudo cryptsetup luksDelKey /dev/HARDDISK

卸载分区
只要你有足够的权限,你就可以使用dmsetup命令,你可以显示设备映射,观看哪个设备是可用的,即便并没有被挂载。从这种意义上看,这个设备在一定程度上已经被解密了。为了防止出现以上情况,你可以运行以下命令以正确卸载设备:
sudo umount /media/DEVICENAME && sudo cryptsetup luksClose HARDDISK
我创建了以下一个小shell程序以实现我的需要,编辑~/umount.sh输入以下内容:
#!/bin/bash
sudo umount /media/DEVICENAME && sudo cryptsetup luksClose HARDDISK
然后赋予文件可执行权限:
sudo chmod a+x ~/umount.sh
最后你还可以给它创建一个图标,具体过程随桌面环境各有不同,这里就不赘述了。

尾注
现在你已经拥有了你自己的加密分区。你可以交换使用dm-crypt和lucks来看看它们到底有什么不同。我在这篇文章中使用了整个硬盘,因为我在测试 只用硬盘的某个分区作实验的时候遇到了一些问题。对于我来说这不是什么问题,因为我是希望我的整个硬盘都被加密的。但是其它读者可能就要自己研究如何只加 密一个分区了。Enjoy!

This entry was posted in GNU/Linux and tagged . Bookmark the permalink.

2 Responses to 如何使用dm-crypt和LUKS加密硬盘 (转)

  1. 风之恋_云 says:

    ……今天立春……2008年新春就从这里开始….朋友相聚在网络,祝福声声在空间…… 立春,我国民间有喝春酒、吃春饼、打春牛习俗!

  2. dream1123 says:

    谢谢…

Leave a Reply

Your email address will not be published. Required fields are marked *