2017-10-16 663 views
0

我們已經構建了一個可嵌入第三方網頁的JavaScript模塊。當這個客戶端模塊被初始化時,它通過一個跨站請求在我們的Web應用程序中執行一個事務。需要多長時間才能破解HMAC sha256摘要私鑰給定數據

該交易由外部uuid,電子郵件和一些其他元屬性組成。此消息使用我們的合作伙伴的專用API密鑰與HMAC sha256摘要簽署。

紅寶石例如:

data = { 
    uuid: "ABCAFAFDS", 
    email: "[email protected]", 
    meta: {} 
} 

private_key = "Qd9fe0y2ezqfae4Qj6At" 
signature = OpenSSL::HMAC.hexdigest(
    OpenSSL::Digest.new("sha256"), 
    private_key, 
    data.to_json 
) 

內的第三方網頁,JavaScript客戶端,然後用簽名和數據初始化:

new Client(signature, data).execute();

最初,我們的計劃是允許客戶在我們的系統內創建部分/不完整事務,然後通過REST API請求後續請求以確認/完成事務。假設我們可以確保前端的安全,那麼刪除後端確認要求將是優先考慮的。

我們能否以這種方式使用簽名消息來合理保護客戶端代碼?如果數據和簽名的消息在客戶端可用,那麼考慮到上面的長度,對於壞的演員來說,暴力破解API私鑰長度有多難?

+0

可能更適合http://security.stackexchange.com – deceze

回答

1

這些天大部分互聯網流量都在客戶端上籤了令牌。所有的Gmail登錄,Facebook登錄等都這樣做,所以它是相當標準的。我建議使用現有的標準(和第三方庫),而不是推出自己的令牌。這將讓您利用其他人在這方面的專業知識。

JWT(json web token)已經很常用,並且有許多庫可以用於JWT的工作。有關更多信息,請參見https://jwt.io

+0

感謝布蘭登,使用JWT與滾動我們自己的實現是一個很好的觀點。儘管如此,還有一個問題。在JWT教程中,令牌在後端生成併發送到客戶端。客戶端看不到未簽名的有效負載或標頭。使用我們的模塊,可以在UI(uuid,電子郵件,元屬性等)中有效識別有效負載信息,因爲我們直觀地顯示這些屬性。這是否會破壞協議的安全性?鑑於他們對有效負載和頭文件的瞭解,它是否會讓黑客更容易猜測私鑰? – Ben

+0

不,它本質上是一樣的 - jwt令牌只是簽名,沒有加密。它們看起來只是因爲令牌是base64編碼而被混淆了。您可以使用客戶端jwt庫來解碼令牌並獲取用於顯示目的的內容。請注意,jwt令牌支持多種簽名算法 - 有對稱和非對稱算法,這意味着您甚至可以使用非對稱算法,這將允許任何人(甚至客戶端)使用公鑰來驗證令牌的真實性,而無需訪問私鑰。 – Brandon

+0

而且,顯然,由於令牌沒有加密,因此不要將任何數據放入應該對客戶端保密的令牌 – Brandon

相關問題