Base64 或十六進制將身份驗證令牌附加到 URL?
我剛剛遇到了這個問題,但它並沒有真正回答我對密碼令牌的主要擔憂。
驗證未登錄的客戶端;我生成兩個隨機令牌,然後將一個用作 DB 選擇器,另一個用作驗證器,以對給定操作(例如重置密碼等)的未知客戶端進行身份驗證。
我的問題不是關於雜湊的生成,這一切都完成了。問題是我被告知將雜湊的 base64 表示附加到重置密碼或任何 URL。因為它使用更少的空間/比 HEX 更有效。這當然是對的,但是如果你使用更短的 base64 字元串,那麼對於暴力攻擊不是更危險嗎?
我想我看到了混亂。使字元串更短不像擁有更短的密碼。
縮短密碼確實會使蠻力攻擊更快,因為可能的密碼數量越來越少,所以你必須嘗試更少的密碼來蠻力它。
但是以不同的基數(16 或 64)編碼固定大小的雜湊值不會改變暴力破解所需的可能組合的數量,因此不會使暴力破解更容易或更快,假設攻擊者已經看到了至少一個範例散列,所以可以猜出它編碼的基數。
Base64 是 base16 長度的 2/3(它對每個字元編碼 6 位而不是 4 位)。
因此,假設您正在嘗試暴力破解各種不同的雜湊值。讓我們計算一下,在最壞的情況下,您需要嘗試多少種可能的組合。
單個 24 位整數: (16777216 個可能值)^(1 個整數)= 16777216 次嘗試。嗯,呃,obvs。
一個 4 字元、base-64 字元串: (64 個可能的值)^(4 個字元)= 16777216次嘗試。
一個 6 字元、base-16 字元串: (16 個可能的值)^(6 個字元)= 16777216 次嘗試。
一個 24 個字元的二進製字元串: (2 個可能的值)^(24 個字元)= 16777216 次嘗試。
注意這些數字是如何完全相同的。我們必須嘗試完全相同數量的不同可能性才能在每種情況下找到正確的可能性,因為它們都是24位值,只是以不同的方式編碼。