📄 rfc2289.txt
字号:
[4] Haller, N., and R. Atkinson, "On Internet Authentication",
RFC 1704, October 1994.
[5] Haller, N., "The S/KEY One-Time Password System",
RFC 1760, February 1995.
[6] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321,
April 1992.
[7] National Institute of Standards and Technology (NIST),
"Announcing the Secure Hash Standard", FIPS 180-1, U.S.
Department of Commerce, April 1995.
[8] International Standard - Information Processing -- ISO 7-bit
coded character set for information interchange (Invariant Code
Set), ISO-646, International Standards Organization, Geneva,
Switzerland, 1983
[9] Computer Emergency Response Team (CERT), "IP Spoofing and
Hijacked Terminal Connections", CA-95:01, January 1995.
Available via anonymous ftp from info.cert.org in
/pub/cert_advisories.
[10] Atkinson, R., "Security Architecture for the Internet Protocol",
RFC 1825, August 1995.
[11] Atkinson, R., "IP Authentication Header", RFC 1826, August
1995.
[12] Atkinson, R., "IP Encapsulating Security Payload (ESP)", RFC
1827, August 1995.
13.0 作者的地址
Neil Haller
Bellcore
MCC 1C-265B
445 South Street
Morristown, NJ, 07960-6438, USA
Phone: +1 201 829-4478
Fax: +1 201 829-2504
EMail: nmh@bellcore.com
Craig Metz
Kaman Sciences Corporation
For NRL Code 5544
4555 Overlook Avenue, S.W.
Washington, DC, 20375-5337, USA
Phone: +1 202 404-7122
Fax: +1 202 404-7942
EMail: cmetz@cs.nrl.navy.mil
Philip J. Nesser II
Nesser & Nesser Consulting
13501 100th Ave NE
Suite 5202
Kirkland, WA 98034, USA
Phone: +1 206 481 4303
EMail: pjnesser@martigny.ai.mit.edu
Mike Straw
Bellcore
RRC 1A-225
445 Hoes Lane
Piscataway, NJ 08854-4182
Phone: +1 908 699-5212
EMail: mess@bellcore.com
附录 A - 安全哈希算法界面
原始互操作测试提供了有效的察看当转换协议规范到运行编码时的细微的问题。特别是,数据比特顺序的操作依赖于硬件结构,计算机存储多字节数据的具体方式。这种方法典型的称为大或者小头("endian")。大头机器存储数据最高有效位在前,而小头机器存储数据最低有效位在前。这样,在大头机器上数据存储从左到右,而小头机器存储数据从右到左。
例如,四字节值0x11AABBCC存储在大头机器是按照下列四字节序列"0x11", "0xAA", "0xBB", 和"0xCC",而在小头机器上存储序列将是"0xCC", "0xBB", "0xAA", 和"0x11"。
由于历史的原因,和为了促进已存在设备的互操作性,决定所有哈希合并到OTP协议必须(MUST)存储哈希函数的输出以小头格式,这在输出比特流折叠为64比特(bits)之前发生。这个在MD4和MD5执行中被做(参见参考[2]和[6]),然而对于SHA1(参见参考[7])的执行必须明确被做。
任何未来应用到OTP协议的哈希函数应该(SHOULD)提供允许独立应用操作成功的相似的代码参考片断。
MD4 消息文摘 (参见参考 [2])
MD4_CTX md;
unsigned char result[16];
strcpy(buf, seed); /* seed must be in lower case */
strcat(buf, passwd);
MD4Init(&md);
MD4Update(&md, (unsigned char *)buf, strlen(buf));
MD4Final(result, &md);
/* Fold the 128 bit result to 64 bits */
for (i = 0; i < 8; i++)
result[i] ^= result[i+8];
MD5 消息文摘 (参见参考[6])
MD5_CTX md;
unsigned char result[16];
strcpy(buf, seed); /* seed must be in lower case */
strcat(buf, passwd);
MD5Init(&md);
MD5Update(&md, (unsigned char *)buf, strlen(buf));
MD5Final(result, &md);
/* Fold the 128 bit result to 64 bits */
for (i = 0; i < 8; i++)
result[i] ^= result[i+8];
SHA 安全哈希算法 (参见参考[7])
SHA_INFO sha;
unsigned char result[16];
strcpy(buf, seed); /* seed must be in lower case */
strcat(buf, passwd);
sha_init(&sha);
sha_update(&sha, (unsigned char *)buf, strlen(buf));
sha_final(&sha); /* NOTE: no result buffer */
/* Fold the 160 bit result to 64 bits */
sha.digest[0] ^= sha.digest[2];
sha.digest[1] ^= sha.digest[3];
sha.digest[0] ^= sha.digest[4];
/*
* copy the resulting 64 bits to the result buffer in little endian
* fashion (analogous to the way MD4Final() and MD5Final() do).
*/
for (i = 0, j = 0; j < 8; i++, j += 4)
{
result[j] = (unsigned char)(sha.digest[i] & 0xff);
result[j+1] = (unsigned char)((sha.digest[i] >> 8) & 0xff);
result[j+2] = (unsigned char)((sha.digest[i] >> 16) & 0xff);
result[j+3] = (unsigned char)((sha.digest[i] >> 24) & 0xff);
}
附录 B - 可替换字典算法
OTP一次口令可替换字典编码的目的是允许特指语言或者友好词句的使用。大小写转换总没有很好的定义,所以可替换字典编码是大小写敏感的。服务应该(SHOULD)接受除了标准六词和十六进制编码以外的这种编码。
使用可替换字典的编码生成程序
标准六词编码使用在字典中词的布局表示11-bit 数字的编码。那么64-bit一次口令能够通过六个词表示。
一个2048词的可替换字典可以这样创造,每个词W和词在字典中的位置顺序N的关系如下:
alg( W ) % 2048 == N
其中
alg是使用的哈希算法 (例如 MD4, MD5, SHA1)。
此外,在标准字典中没有词可以被选择。
产生器通过计算标准六词编码的奇偶校验扩展64-bit 一次口令到66 bits。六个11-bit数字然后通过使用例如上面关系创造的字典转换为词。
可替换字典一次口令的服务解码
使用上面的编码服务接受可替换字典编码转换每一个词到11-bit数字。这些数字然后使用同样的方式解码标准字典词来形成66-bit 一次口令。
服务不需要已经存取了其要被验证的一次口令创建使用的可替换字典。这是因为从词到11-bit 数字的解码不必使用任何字典。作为字典独立的结果,服务可以接受一个可替换字典,就可以接受所有的可替换字典。
附录 C - OTP认证例子
这个附录提供了三个定义的OTP密码哈希算法一系列的输入和正确的输出——MD4、MD5和SHA1。这篇文档目的是当创建产生器和服务时为了开发者互操作检查使用。输出在文档附录D中以十六进制计数法和六词编码提供。
普通检查
注意给定这些检查的输出不是为了逐字地去做,但是动作类型的描述应该给出。
Pass Phrase Length(通行短语长度)
Input:(输入)
Pass Phrase: Too_short(通行短语)
Seed: iamvalid(种子)
Count: 99(计数)
Hash: ANY(哈希算法)
Output:(输出)
ERROR: Pass Phrase too short(通行短语太短)
Input:
Pass Phrase:
1234567890123456789012345678901234567890123456789012345678901234
Seed: iamvalid
Count: 99
Hash: ANY
Output:
WARNING: Pass Phrase longer than the recommended maximum length of 63(通行短语的长度大于推荐的最长长度63)
Seed Values(种子值)
Input:
Pass Phrase: A_Valid_Pass_Phrase
Seed: Length_Okay
Count: 99
Hash: ANY
Output:
ERROR: Seed must be purely alphanumeric(种子必须完全是字母数字)
Input:
Pass Phrase: A_Valid_Pass_Phrase
Seed: LengthOfSeventeen
Count: 99
Hash: ANY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -