在阅读OpenVPN 2.3的手册时,我偶然发现了--auth alg
选项。手册上说:
使用消息摘要算法
alg
对数据包进行HMAC认证。(默认为SHA1 )。HMAC是一种常用的消息认证算法(MAC),它使用数据字符串、安全哈希算法和密钥来生成数字签名。
据我所知,HMAC只是从哈希函数生成MAC的首选方法,同时可以避免某些哈希函数的长度扩展属性。
因此,--auth
选项中指定的算法应该是一个哈希函数。
现在,如果我使用openvpn --show-digests
来知道我可以在--auth
选项中使用哪些算法,那么我还得到了如下条目:
RSA-SHA, DSA-SHA, ECDSA-WITH-SHA1... etc.
这些是数字签名算法,为什么要在HMAC中使用?才能得到某种“双重认证”?是不是有点过火了?
或者这是否意味着在这种情况下,HMAC实际上被数字签名所取代,以实现身份验证?如果是这样的话,在安全性方面有什么更好的方法呢?
发布于 2015-07-17 19:24:34
从OpenVPN的源代码来看,这似乎是OpenSSL的一个表面上的怪癖。
当使用--show-digests
时,OpenVPN用0到999之间的所有整数作为参数调用OpenSSL的EVP_get_digestbynid()
。对于其中一些值,EVP_get_digestbynid()
返回一个非空指针,该指针标识相应的哈希函数实现,然后OpenVPN输出相应的名称。
在ID = 64的情况下,您会得到一个实现SHA-1的结构,与ID值64对应的名称是"SHA1“。但是,如果ID = 65,则得到完全相同的结构(RAM中的指针相同),即SHA-1的相同实现。但是ID值65的名称是“RSA-SHA1 1”。
当您使用--auth
时,同样适用: OpenVPN在提供的字符串上使用EVP_get_digestbyname()
。使用"SHA1",您将得到一个指向实现SHA-1的结构的指针。使用“RSA-SHA1 1”,您将再次获得完全相同的指针值。
换句话说,您可以看到一些带有某些RSA或ECDSA的“备用名称”,但这仅仅是OpenSSL命名事物的结果,如果使用这些名称,您只会获得底层的散列函数(将在HMAC中使用),仅此而已。因此,--auth SHA1
和--auth RSA-SHA1
是完全等价的。
https://security.stackexchange.com/questions/91908
复制相似问题