我重新寫一個加密/壓縮庫,現在看來似乎越來越成爲每個處理的字節進行大量的處理。我寧願選擇加密可以去哪幾種有限的方式(正確的方法)時使用枚舉類型,但是當這些路徑成爲週期性的,我必須添加額外的代碼來測試type'last和type'first。我總是可以爲這個類型寫一個這樣的條件,或者給函數的類型賦一個加法/減法運算符來包裝結果,但這是更多的代碼和處理,當它必須每八字節以及其他一切。有沒有一種方法,使約高效,好像它是一個簡單的「國防部」式的操作,如在Ada中,是否有一種方法可以使枚舉類型像模數類型一樣工作 - 在最後一個範圍之後將其包裝爲0?
type Modular is mod 64 ....;
for ......;
pragma ....;
type Frequency_Counter is array(Modular) of Long_Integer;
Head : Modular := (others => 0);
Freq : Frequency_Counter(Size) := (others => 0);
Encryption_Label : Modular := Hash3;
Block_Sample : Modular := Hash5;
...
Hash3 := Hash3 + 1;
Freq (Hash3):= Freq(Hash3) + 1; -- Here is where my made-on-the-fly example is focused
我想我可以使整個算法更高效,使用枚舉類型,如果我可以得到枚舉類型在處理器中以與mod類型數學相同的週期數進行數學運算。我在思考方式時有點創意,但他們顯然不適合我以任何方式作爲例子。我能想到的唯一可能超出我的技能,並且正在使用內聯ASM(氣體彙編語言語法)使得操作對處理器非常直接。
PS:我知道這是一個小的增益,獨自一人。任何收益都適用於該應用程序。
改寫加密庫時要小心。一些低效率是故意的,以減輕旁道攻擊。話雖如此,提高加密性能的奇特方法是利用[AES指令集](https://en.wikipedia.org/wiki/AES_instruction_set)。這往往會提供5倍或更高的性能提升。 – Brian
我很欣賞這個警告,儘管我很謙虛,因爲我沒有受到足夠的教育以防止他們通過旁道攻擊,但是,我認爲風險很低,因爲沒有鑰匙直接存儲在庫中 - 它們在輸入時直接轉換到解釋值的緩衝塊,其在至少兩個循環操作中使用。使用平臺並不都支持AES指令集。感謝您的幫助:) –
這不足以防止定時攻擊。也就是說,當加密是客戶端而不是服務器端時,許多此類攻擊變得不那麼重要。另一個擔心是無意中削弱了加密。這不能通過像單元測試這樣的東西來輕易檢測到; AES的弱化形式仍然與AES的適當實現(例如,破壞的RNG)完全兼容。 – Brian