簡體   English   中英

為什么使用C crypt函數將鹽包含在哈希中

[英]Why salt is included in hash with c crypt function

看一下這個非常基本的c程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <crypt.h>

int main (int argc, char *argv[]) 
{
    char pid[16];
    int id;
    for (id = 0;  id < 100; id++) 
    {
       snprintf(pid, sizeof(pid), "%i", id);
       printf("%s %s\n",pid, crypt(pid, "$1$awesome"));
    }
}

這是Linux系統上的輸出:

0 $1$awesome$cVjo4Ue9HeJs7sStMTm6v.
1 $1$awesome$6.658tD5uVqwQJ6/S8Mc71
2 $1$awesome$bKavcHTWRGnlTgP.zTZhO.
3 $1$awesome$ZlBH.fgxGrfw/naq38hyv.
4 $1$awesome$aQCliN7gPud1PC07Vri.y1
5 $1$awesome$EewcRVU39I/n0uMGaDxCN0
6 $1$awesome$fKMRDZaa5wra4G8xy9.m0/
7 $1$awesome$AqJ0SmXImg.xcUg/Yh/ov.
8 $1$awesome$bT3Wq9QORw1dnNZFZmVBk.
9 $1$awesome$4uM8mfZGdj2zeZ/CP/GSz1
10 $1$awesome$Gsa/ilcFg1LRl2dqNhgXg0

我不明白為什么鹽在輸出中可見。 我試圖在Mac OS X上編譯相同的程序,但沒有看到哈希值。 這不是安全漏洞嗎? 我們不應該在哈希表中清楚地看到鹽嗎?

謝謝

閱讀最初提出該建議的研究人員的第3節 它說了@jonrsharpe在上面的評論中說的,但是總是很高興獲得原始信息(強調我的意思):

當密鑰搜索技術用於大量密碼時,它仍然可能會出現一些密碼,並且使此任務盡可能困難是明智的。 為此, 當首次輸入密碼時,密碼程序將獲得12位隨機數 (通過讀取實時時鍾) ,並將其附加到用戶輸入的密碼上。 串聯的字符串被加密,並且12位隨機量(稱為salt)和64位加密結果都輸入到密碼文件中

當用戶以后登錄到系統時,將從密碼文件中提取12位數量並將其附加到鍵入的密碼上。 與以前一樣,要求加密的結果與密碼文件中其余的64位相同 此修改不會增加從頭開始查找任何單個密碼的任務,但是現在針對大量加密密碼測試給定字符串的工作已乘以4,096(2 ^ 12)。 原因是每個密碼有4,096個加密版本,並且系統已或多或少地隨機選擇了其中一個。

通過此修改,壞蛋很可能會花費數天的計算機時間來嘗試在具有數百個密碼的系統上查找密碼,而根本找不到密碼。 更重要的是,事先准備加密字典變得不切實際。 這樣的加密字典可用於在新密碼出現時以毫秒為單位破解新密碼。

此修改有(並非無意)副作用。 除非您已經知道,否則幾乎不可能找出在兩個或多個系統上具有密碼的人是否在所有系統上都使用了相同的密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM