密碼學系列之:memory-bound函數 簡介 內存函數 內存受限函數

簡介

memory-bound函數可以稱爲內存受限函數,它是指完成給定計算問題的時間主要取決於保存工作數據所需的內存量。和之相對應的就是計算受限compute-bound的函數,在計算受限的函數中,計算所需要的計算步驟是其決定因素。

本文將會介紹一下內存受限函數和它跟內存函數的關係。

內存函數

內存函數和內存受限函數看名字好像很類似,其實他們的作用是不同的,我們先來看下內存函數。

在學習算法中,有一個非常簡單好用的算法叫做遞歸算法,熟悉遞歸算法的朋友可能都知道,遞歸算法雖然好用,但是有個缺點就是會重複計算遞歸過程中的函數,比如說遞歸中最經典的斐波拉赫數列:

 Recursive_Fibonacci (n)
 {
     if (n == 0)
         return 0
     if (n == 1)
         return 1

     return Recursive_Fibonacci (n-1) + Recursive_Fibonacci (n-2)
 }

很簡單,但是我們來考慮下計算過程,F(3)=F(2)+F(1), 而F(4)=F(3)+F(2),在這個過程中需要計算2次F(2)的值。如果計算的N值夠大的話,重複計算的值還會更多。

一個解決方法就是將之前計算過的結果使用內存存起來,這種方法就叫做內存函數:

 Fibonacci (n)
 {
     for i = 0 to n-1
         results[i] = -1  // -1 means undefined

     return Fibonacci_Results (results, n);
 }

 Fibonacci_Results (results, n)
 {
     if (results[n] != -1)  // If it has been solved before,
         return results[n]  // look it up.
     if (n == 0)
         val = 0
     else if (n == 1)
         val = 1
     else
         val = Fibonacci_Results(results, n-2 ) + Fibonacci_Results(results, n-1)
     results[n] = val  // Save this result for re-use.

     return val
 }

雖然直接遞歸的邏輯很簡單,寫起來也很方便,但是它的時間複雜度會更高。

內存受限函數

內存受限函數主要用來描述一個使用XOR的函數,它由一系列計算組成,其中每一次計算都依賴於前一次計算。

因爲這樣的內存依賴關係,所以內存受限函數主要用在密碼學中,可以防止密碼的暴力破解工作。

下面舉個內存受限函數在防止垃圾郵件中的使用。

內存受限函數的使用

使用內存受限函數來防止垃圾郵件,主要使用的是POW的原理,也就是說,你可以給我發垃圾郵件,但是前提是需要付出一些代價。

當然,最初的防垃圾郵件的原理是使用CPU受限函數。

1992年,IBM的研究科學家Cynthia Dwork和Moni Naor在CRYPTO上發表了一篇題爲《通過定價來阻止垃圾郵件》的論文,他們提出了一種利用CPU受限函數的功能來阻止濫用者發送垃圾郵件的可能性。

該方案的原理是:如果濫發郵件的成本很低,那麼垃圾郵件就可能橫行。如果能夠通過以昂貴的CPU計算的形式爲發送郵件添加額外的計算成本,就可以減少垃圾郵件。使用CPU受限函數,使得每發一次郵件都需要消耗一定的CPU資源,從而防止在短時間內發送大量的垃圾郵件。

CPU受限函數是一種突破,但是也有其缺點。

因爲快CPU的計算速度比慢CPU快得多。此外,高端計算機系統也有複雜的流水線和其他有利於計算的優化功能。因此,擁有高端系統的垃圾郵件發送者幾乎不會受到這種CPU受限函數的影響。

從而會因爲不同用戶機器性能的不同,導致非常大的計算時間差異。比如如果一個算法在高級計算機上需要幾秒鐘,那麼在老的計算機上可能需要1分鐘,而在性能更差點的手機上可能會需要幾分鐘,那麼這個算法肯定是無法被手機用戶接受的。

因此,研究者們關注的是如何找到一種在大多數計算機系統都以大致相同的速度運行的函數,雖然在高級計算機上速度會更快,但也只是稍微快一點而已,不是幾何級數的快,那麼就可以在容忍範圍之內。

這種方法就是使用內存受限函數。內存受限函數是指計算時間由訪問內存的時間支配的函數。內存受限函數以一種不可預測的方式訪問大內存區域的位置,從而無法使用緩存來提升性能。

使用內存受限而不是CPU受限也有其工業上的原因,近年來,雖然CPU的計算速度急劇增長,但在開發更快的主內存方面進展相對較小。所以可以預見,在未來的一定時間內,內存受限函數還會有越來越多的應用場景。

本文已收錄於 http://www.flydean.com/memory-bound/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章