15.5. 一次性口令
上一页 | 第 15 章 安全 | 下一页

## 15.5. 一次性口令

默认情况下， FreeBSD 提供了 OPIE (One-time Passwords In Everything) 支持， 它默认使用 MD5 散列。

下面将介绍三种不同的口令。 第一种是您常用的 UNIX® 风格或 Kerberos 口令； 我们在后面的章节中将称其为 “UNIX® 口令”。 第二种是使用 OPIE 的 opiekey(1) 程序生成， 并为 opiepasswd(1) 以及登录提示所接受的一次性口令，我们称其为 “一次性口令”。 最后一类口令是您输入给 `opiekey` 程序 (有些时候是 `opiepasswd` 程序) 用以产生一次性口令的秘密口令，我们称其为 “秘密口令” 或通俗地简称为 “口令”。

秘密口令和您的 UNIX® 口令毫无关系， 尽管可以设置为相同的， 但不推荐这么做。 OPIE 秘密口令并不像旧式的 UNIX® 口令那样只能限于8位以内[8]。 您想要用多长的口令都可以。 有六、七个词的短句是很常见的选择。 在绝大多数时候， OPIE 系统和 UNIX® 口令系统完全相互独立地工作。

除了口令之外， 对于 OPIE 还有两组至关重要的数据。 其一被称作 “种子” 或 “key”， 它包括两个字符和五个数字。 另一个被称作 “迭代轮数”， 这是一个 1 到 100 之间的数字。 OPIE 通过将种子加到秘密口令后面， 并执行迭代轮数那么多次的 MD4/MD5 散列运算来得到结果， 并将结果表示为 6 个短的英文单词。 这 6 个英文单词就是您的一次性口令。 验证系统 (主要是 PAM) 会记录上次使用的一次性口令， 如果用户提供的口令的散列值与上次一致， 则可以通过身份验证。 由于使用了单向的散列函数， 因此即使截获了上次使用的口令， 也没有办法恢复出下次将要使用的口令； 每次成功登录都将导致迭代轮数递减， 这样用户和登录程序将保持同步。 每当迭代轮数减少到 1 时， 都必须重新初始化 OPIE。

接下来将讨论和每个系统有关的三个程序。 `opiekey` 程序能够接收带迭代计数， 种子和秘密口令， 并生成一个一次性口令， 或一张包含连续的一组一次性口令的表格。 `opiepasswd` 程序用于初始化 OPIE， 并修改口令、 迭代次数、种子和一次性口令。 和 `opieinfo` 程序可以用于检查相应的验证数据文件 (`/etc/opiekeys`) 并显示执行命令的用户当前的迭代轮数和种子。

我们将介绍四种不同的操作。 在安全的连接上通过 `opiepasswd` 来第一次设置一次性口令， 或修改口令及种子。 第二类操作是在不安全的连接上使用 `opiepasswd` 辅以在安全连接上执行的 `opiekey` 来完成同样的工作。 第三类操作是在不安全的连接上使用 `opiekey` 来登录。 最后一类操作是采用 `opiekey` 来生成大批的密码， 以便抄下来或打印出来，在没有安全连接的地方使用。

### 15.5.1. 安全连接的初始化

第一次初始化 OPIE 时， 可以使用 `opiepasswd` 命令：

`%` `opiepasswd -c` [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED

在 `Enter new secret pass phrase:` 或 `Enter secret password:` 提示之后， 应输入一个密码或口令字。 请留意， 这并不是您用于登录的口令， 它用于生成一次性的登录密钥。 “ID” 这一行给出了所需的参数： 您的登录名， 迭代轮数， 以及种子。 登录系统时， 它能够记住这些参数并呈现给您， 因此无需记忆它们。 最后一行给出了与您的秘密口令对应的、用于登录的一个一次性口令； 如果您立即重新登录， 则它将是您需要使用的那个口令。

### 15.5.2. 不安全连接初始化

如果您需要通过一个不安全的连接来初始化， 则应首先在安全连接上执行过一次 `opiekey`； 您可能希望在可信的机器的 shell 提示符下完成。 此外还需要指定一个迭代轮数 (100 也许是一个较好的选择) 也可以选择一个自己的种子， 或让计算机随机生成一个。 在不安全的连接上 (当然是连到您希望初始化的机器上)，使用 `opiepasswd` 命令：

`%` `opiepasswd` Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY

为了接受默认的种子， 按下 Return （回车）。 在输入访问口令之前， 到一个有安全连接的机器上， 并给它同样的参数：

`%` `opiekey 498 to4268` Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT

现在回到不安全的连接， 并将生成的一次性口令粘贴到相应的应用程序中。

### 15.5.3. 生成一个一次性密码

一旦初始化过 OPIE， 当您登录时将看到类似这样的提示：

`%` `telnet example.com` Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: `<username>` otp-md5 498 gr4269 ext Password:

另外， OPIE 提示有一个很有用的特性 (这里没有表现出来)： 如果您在口令提示处按下 Return (回车) 系统将回显刚键入的口令， 您可以藉此看到自己所键入的内容。 如果试图手工键入一个一次性密码， 这会非常有用。

此时您需要生成一个一次性密码来回答这一提示。 这项工作必须在一个可信的系统上执行 `opiekey` 来完成。 (也可以找到 DOS、 Windows® 以及 Mac OS® 等操作系统上运行的版本)。 这个程序需要将迭代轮数和种子提供给它。 您可以从登录提示那里复制和粘贴它们。

在可信的系统上：

`%` `opiekey 498 to4268` Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT

现在就可以用刚刚获得的一次性口令登录了。

### 15.5.4. 产生多个一次性口令

有时，会需要到不能访问可信的机器或安全连接的地方。 这种情形下， 可以使用 `opiekey` 命令来一次生成许多一次性口令。 例如：

`%` `opiekey -n 5 30 zz99999` Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: `<secret password>` 26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI

`-n 5` 按顺序请求 5 个口令， `30` 则指定了最后一个迭代轮数应该是多少。 注意这些口令将按与使用顺序相反的顺序来显示。 如果您比较偏执， 可以手工写下这些结果； 一般来说把它粘贴到 `lpr` 就可以了。 注意，每一行都显示迭代轮数及其对应的一次性的密码； 一些人建议用完一个就划掉一个。

### 15.5.5. 限制使用 UNIX® 口令

OPIE 可以对 UNIX® 口令的使用进行基于 IP 的登录限制。 对应的文件是 `/etc/opieaccess`， 这个文件默认情况下就是存在的。 请参阅 opieaccess(5) 以了解关于这个文件进一步的情况， 以及安全方面需要进行的一些考虑。

下面是一个示范的 `opieaccess` 文件：

permit 192.168.0.0 255.255.0.0

这行允许指定 IP 地址的用户 (再次强调这种地址容易被伪造) 在任何时候使用 UNIX® 口令登录。

如果 `opieaccess` 中没有匹配的规则， 则将默认拒绝任何非 OPIE 登录。

[8] 在 FreeBSD 中标准的登录口令最长不能超过 128 个字符。

上一页 | 上一级 | 下一页
15.4. DES、 Blowfish、 MD5， 以及 Crypt | 起始页 | 15.6. TCP Wrappers

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.