本节看一下挂载操作及其对应的用户态代码。
上面展示了挂载eCryptfs的命令和命令的输出,下面看一下挂载成功后密钥的情况:
在user钥匙环上的描述为“4737d57200bab607”的密钥就是挂载eCryptfs时添加的。下面看一下用户态程序调用内核系统调用的实际参数:
eCryptfs的mount命令在user钥匙环中添加了一个密钥“4737d57200bab607”,然后执行系统调用mount,在mount的参数中包含了“ecryptfs_sig=4737d57200bab607”。
用户在执行挂载命令时输入了一个字符串口令(passphrase)。eCryptfs的用户态工具mount.ecryptfs)会将这个口令转化为一个密钥,加入内核。这个工作在ecryptfs的用户态软件ecryptfs-utils的src/libecryptfs/key_management.c中完成:
ecryptfs_add_passphrase_key_to_keyring调用了ecryptfs_generate_passphrase_auth_tok,用来生成密钥,然后调用了ecryptfs_add_auth_tok_to_keyring用来将密钥加入“user”钥匙环。下面分别看生成密钥的函数ecryptfs_generate_passphrase_auth_tok和加入密钥的函数ecryptfs_add_ auth_tok_to_keyring。
(1)生成密钥(www.xing528.com)
先看ecryptfs_generate_passphrase_auth_tok:
函数ecryptfs_generate_passphrase_auth_tok调用了函数generate_passphrase_sig来生成fekek密钥的密钥)和sig(字面意思是签名,实际上是密钥的名字/描述)。generate_passphrase_sig的作用是将一段口令字符串(passphrase)转化为密钥信息。
对口令做若干次哈希运算就得到了fekek,对fekek再多做一次哈希就得到了sig。
(2)加入密钥
此函数的核心就是调用库函数add_key,将密钥加入内核。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。