Encryption

如何解密此 VNC 身份驗證握手?

  • December 7, 2018

我正在嘗試分析一個移動應用程序,我相信它正在使用 DES。這是身份驗證握手的範例。

{""id":"handshake","authentication":"vnc","authentication-challenge":"A489C9790FB7C3CE2E56868C788641FC"}

{"id":"handshake","authentication-response":"D33BAD35B07EF500A82329749CEE9192"}

{"id":"handshake","authentication-passed":true}

為簡單起見,密碼設置為 AAAAAAA。

對於身份驗證,它被標識為“VNC”。這讓我相信他們正在使用 RFC 6143 定義的 VNC 身份驗證。

https://www.rfc-editor.org/rfc/rfc6143#section-7.2.2

該文件指出:

The client encrypts the challenge with DES, using a password supplied
by the user as the key.  To form the key, the password is truncated
to eight characters, or padded with null bytes on the right.  The
client then sends the resulting 16-byte response

所以如果我理解正確,如果我用“AAAAAAA”的密鑰加密“0xA489C9790FB7C3CE2E56868C788641FC”,它應該等於“0xD33BAD35B07EF500A82329749CEE9192”。那是對的嗎?

挑戰包含:

$ cat  ~/Desktop/challange | xxd -p
a489c9790fb7c3ce2e56868c788641fc

我嘗試執行:

$ openssl des -in ~/Desktop/challange  | xxd -p
enter des-cbc encryption password:
Verifying - enter des-cbc encryption password:
53616c7465645f5f3f72b55c62bf2c9da805942f64f028b090cecc652dde
8cdade63763a253c1d33

這並沒有滿足我的期望,即 D33BAD35B07EF500A82329749CEE9192。我究竟做錯了什麼?

編輯:

我在網上找到了這個。

http://www.vidarholen.net/contents/junk/vnc.html

我相信這可以解釋為什麼我遇到問題。

解決了

challenge":"318E90D502A379A7B1583C35DB772138"}
{"id":"handshake","authentication-response":"1D214EF554123712A0DC9BCF003C27F4"}
{"id":"handshake","authentication-passed":true}

好,我知道了。只是為在這裡絆倒的其他人回答。雖然沒有記錄,但 RFB 會鏡像每個位。使用所有 B 的鍵,我能夠得到我的結果,因為 B 是回文。

需要明確的是,正如 Dave Thompson 所暗示的那樣,挑戰響應似乎只是一個香草 DES ECB,沒有原始海報所建議的半字節交換(我也被連結上的資訊所吸引)。請注意,如果半字節交換,密碼BBBBBBBB將轉換為,因此實際上與這方面沒有任何不同。$$$$$$$$``AAAAAAAA

我能夠使用以下位置的 python 程式碼獲得挑戰響應:https ://github.com/RobinDavid/pydes

只需更改 main 以使用測試數據:

import binascii
key_str = "BBBBBBBB"
data= binascii.unhexlify('318E90D502A379A7B1583C35DB772138')
d = des()
r = d.encrypt(key_str,data)
print binascii.hexlify(r)

引用自:https://crypto.stackexchange.com/questions/41115