web-dev-qa-db-ja.com

OpenVPNでHMACの代わりにRSA-SHAを使用していますか?

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が実際にデジタル署名に置き換えられているということですか?これが事実である場合、セキュリティの観点から何を使用する方が良いですか?

11
NumberFour

OpenVPNのソースコードを見ると、これはOpenSSLの表面的な癖のようです。

_--show-digests_を使用する場合、OpenVPNはOpenSSLのEVP_get_digestbynid()をパラメーターとして0〜999のすべての整数で呼び出します。これらの値の一部では、EVP_get_digestbynid()はNULL以外のポインターを返します。対応するハッシュ関数の実装を識別し、OpenVPNは対応する名前を出力します。

たまたま、ID = 64の場合、SHA-1を実装する構造が得られ、ID値64に対応する名前は「SHA1」です。ただし、ID = 65の場合、まったく同じ構造(RAM内の同じポインター)、つまりSHA-1のまったく同じ実装が得られます。ただし、ID値65に対応する名前は「RSA-SHA1」です。

_--auth_を使用する場合も同様です。OpenVPNは、提供された文字列でEVP_get_digestbyname()を使用します。 「SHA1」を使用すると、SHA-1を実装する構造へのポインターを取得できます。 「RSA-SHA1」を使用すると、まったく同じポインター値が再び得られます。

言い換えると、RSAまたはECDSAでいくつかの「代替名」が表示されますが、これはOpenSSLが名前を付ける方法の結果であり、これらの名前を使用すると、基盤となるハッシュ関数(HMACで使用される)だけを取得します。 。したがって、_--auth SHA1_と_--auth RSA-SHA1_は完全に同等です。

13
Thomas Pornin