查找加密中間值的站點
有誰知道可以找到包括雜湊在內的多種加密算法(不僅僅是著名算法)的中間值的任何站點?我不僅僅指加密的中間值。我也在尋找密鑰生成算法的中間值。希望初始值可以更改,或者至少不僅僅是 0 的字元串,因為許多算法使用小端符號,它不會出現在 0 的字元串中。
上一句的意思是:
火星密碼適用於小端值。在 ibms 的測試向量中,值為
0000000000000...
. 因此,當我將密鑰輸入火星時,我得到{0,0,0,...,0}
. 美好的。現在如果測試向量是
1234...
,現在會發生什麼?如果密鑰/加密/解密算法有中間值,我會知道測試向量是否已經是小端序,或者我是否必須將其更改為... 34 12
?
通常,測試向量,特別是中間值的測試向量,可以通過該算法的“官方規範”找到。MARS 沒有一個標準(很少有算法),所以“官方規範”是IBM 分發的,特別是MARS 包(壓縮存檔)。
此包包含規範本身作為 PDF 文件(在 中
MARS/Algorithm/mars.pdf
)、範例實現和測試向量(在MARS/Test_Values/
目錄中)。特別是,請查看ecb_ivt.txt
包含一些“中間值”的文件。作為一個更通用的規則,當面對低質量或不存在的測試向量(“低質量”的意思,例如,有一些十六進製字節但沒有明確的字節序規則)時,通常的方法是找到一個“參考實現”並在其程式碼中散佈
printf()
語句,以獲取中間值。我建議使用 Java 程式碼,在實踐中,它給您帶來的麻煩比任何 C 程式碼都要少(這是 Java 平台嚴格性的好處)。NESSIE 項目在分析許多密碼算法方面付出了巨大的努力,它為所有這些算法生成了大量的測試向量。這是一個很好的來源(但 MARS 沒有作為“NESSIE 候選人”送出,所以在 MARS 的情況下沒有運氣)。
如果一切都失敗了,您可以隨時向函式作者發送電子郵件。大多數函式作者都是很樂意為您提供幫助的研究人員。
關於字節順序的問題,特別是在 C 語言中,我強烈建議不要嘗試使用記憶體表示來玩遊戲,例如
union
在字節序列和整數類型之間使用 a。這樣的遊戲限制了可移植性,更重要的是,在存在優化編譯器的情況下往往會以可怕的方式崩潰(因為嚴格的類型別名分析)。相反,使用通用編碼和解碼“函式”,如果您檢測到機器和編譯器,您知道可以在其上進行更智能和更便宜的實現,您可以稍後使用內聯函式和宏以及可能的內聯彙編對其進行優化。作為一個例子,看看sphlib,這是一個在 C 和 Java 中實現許多雜湊函式的庫。在 C 程式碼中,所有字節序“智能”都集中在sph_types.h
文件中,該文件為整數類型和編碼/解碼函式定義了統一的名稱(例如sph_dec32be()
,對於 32 位大字節序解碼)。