㈠ EM演算法詳解
作為N大機器學習方法的一員,EM演算法在各種書籍、博客、網上視頻上被描述或者介紹,每次看完總感覺很多地方含糊不清,不能讓一個初學者(有一定統計概率基礎)接受。最近再B站上,看到 徐亦達老師的課程 ,EM演算法這塊講解易於理解和接受,再結合PRML一書的關於混合模型和EM章節內容,對整個EM演算法從具體的原理上面有了更深入的理解。
在下文中,更多的是通過公式推導和一些文字說明來梳理EM演算法,盡量做到大家一看就明白。
極大似然估計是概率統計中,估計模型參數的一種方法,如果對似然概念以及極大似然估計的概念不理解,可參考維基網路 https://zh.wikipedia.org/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1
這里,我們給出一個一維高斯函數的例子。如圖1所示,一維空間裡面離散分布的樣本點其分布特點可以看成是一種高斯分布。那這些樣本的高斯分布函數參數怎麼求解呢?可以通過極大似然估計獲得。
假設我們獲取圖1中數據樣本集合為 ,其分布函數假設為一維高斯分布,即:
那所有數據的聯合概率,即似然函數為:
對等式兩邊求log,即log-likelihood:
分別對參數求導:
可以得到:
通過上述方法,就可以得到基於樣本數據和假設分布函數模型情況下,得到樣本數據的分布函數。
從圖2所示中,如果樣本數據分布式藍色點和橙色點的集合,如果依然用高斯分布去進行最大似然估計,得到的分布模型自然是不合適的。很顯然,樣本數據分布存在兩個密集區(藍色點和橙色點),如果能通過一種方法,確認樣本數據裡面的藍色點和橙色點,然後分別對藍色點集合進行一個高斯估計,對橙色點集進行另外一個高斯估計,兩個高斯混合到一起,是不是比單個高斯能更好的匹配樣本數據的分布情況。這種情況下的分布函數就是高斯混合模型。
這里我們先直接給出高斯混合模型的分布函數(多維):
在圖2例子中,提到如果給每一個數據樣本能夠先進行分類,即確定屬於哪一個集中的簇中,就能比較容易的進行混合模型的求解。這說明了什麼呢?我們可以理解,原始樣本數據是不完全的(incomplete),引入一個K維的二值隨機變數 ,這個變數採用"1-of-K"的表示方法,即K維中,只有一維是1,其餘所有元素等於0。那麼每一個樣本數據,即有數據特徵 ,再匹配一個分配變數 ,就可以將圖2過程完整描述,即我們認為 和 聯合在一起才是完全的(complete)。
數學表示上,我們利用邊緣概率分布 和條件概率分布 定義聯合概率分布 .
的邊緣概率分布根據混合系數 進行賦值,即 ,使得邊緣概率分布是合法,那麼:
類似的,在給定 的一個特定的值,即針對某一簇的情況, 的條件概率分布是一個高斯分布,即
那麼根據貝葉斯公式得到高斯混合模型:
由於我們只能觀察樣本數據 ,無法直接獲取每個數據的分配變數 ,可理解 為潛在變數(latent)
依據極大似然函數的求解方法,我們可以對高斯混合模型寫出數據的對數似然函數:
由於對數函數內部出現求和,這種情況是沒有辦法通過求導等於0的方式獲取估計參數的解析解的。這種情況下,就需要用到EM演算法,通過迭代方式獲取估計參數。下面我們先從一般性問題上進行EM演算法的理論描述,然後再利用EM演算法推導高斯混合模型的計算方法。
EM演算法叫做期望最大化方法,首先我們給出EM演算法一般性結論或者說步驟,其具體分為兩步,即E-step和M-step。
EM演算法的步驟,通過高斯混合模型可以直觀理解記憶。 是什麼意思呢,其含義是在給定數據樣本的情況下,潛在變數的概率情況。也就是說在高斯混合模型中,給定樣本數據,我們推測樣本屬於哪一個高斯簇的概率情況。在確定分配情況後,每一個簇都用高斯進行估計,衡量估計好還是不好,用期望形式表示。這樣可以幫助理解和記憶Q的定義。那EM演算法怎麼證明其收斂性呢?
我們要保證:
這樣每次迭代可以使得似然函數隨著參數變大,一直到似然函數不再增大或滿足其他終止條件止。
那怎麼保證呢?首先,利用貝葉斯公式有:
兩邊同時取log
然後兩邊同時用 求期望,可以得:
等式左邊 和 沒有關系, 是概率密度函數,積分是1,所以等式左邊依然是 .
等式右邊第一項就是E-step裡面的Q函數,第二項我們記做H函數,則:
要保證 ,首先 ,那麼是不是保證 滿足,就一定有 ?答案是肯定的。(說明一下,這裡面的H和Q函數都是關於 的函數,每一次迭代 是已知的,他不是變數)
那下面只要證明 就可以了。
因此可以得到 ,則整個EM演算法的收斂性證畢。
註:這里用到了Jessian不等式,如果函數是convex的,則有函數的期望大於期望的函數,即 .
上述EM演算法的證明,有一些技巧性,而這些技巧性有沒有一種是在已知結論基礎上硬湊的感覺呢,尤其是用 去求期望,就是為了去構造Q函數。那有沒有更好的解釋或者更為直觀的方式來得到相同的結論呢?答案是有的。
首先,仍然用到:
我們稍微變個型,假設一個概率密度函數 :
兩邊同時用 求期望:
其中等式右邊第一項,我們記做 ,可以稱為ELOB,EvidenceLowerBound,第二項是 和 的KL散度。
如圖4所示,當我固定參數 時候,ELOB就是關於 的泛函(只聽過沒學過,可理解為函數的函數),那ELOB的上界是什麼呢?那首先要理解KL散度,KL散度是衡量兩個概率分布之間的差異性,如果兩個分布沒有差異,則KL散度等於0,如果有差異則大於0,所以KL散度的最小值就是0,那ELOB的上界就是此刻的似然函數。
在EM演算法中,當前迭代時,參數 ,則對於E-step,我們需要使得ELOB最大,即KL散度為0,如圖5所示,其中 為 。此時,
對於M-Step,我們是需要得到新的估計參數,這個時候,固定 ,重新獲得ELOB的最大值,這個時候的ELOB是什麼樣的呢?
右邊第二項沒有參數 ,所以固定 最大化ELOB,就等於最大化第一項,而第一項是什麼呢?就是 函數。
如圖6所示,我們最大化 函數,也就是最大化此次迭代的ELOB。在新的參數下, ,此刻 不變,所以和新的 在沒有達到局部(或者全局)極大值的情況下,是兩個不同的概率分布,即二者KL散度是大於0的,那此刻的似然函數等於此刻的KL散度加上此刻的ELOB,自然是有 。
從ELOB和KL散度的層面可以更好的理解EM演算法的迭代過程。
PRML一書中,有圖7所示的示意圖,能比較形象的說明,EM演算法的迭代過程。
圖7中,紅色曲線表示(不完整數據)對數似然函數,它的最大值是我們想要得到的。我們首先選擇某個初始的參數值 ,然後在第一個E步驟中,我們計算潛在變數上的後驗概率分布,得到了 的一個更小的下界,它的值等於在 處的對數似然函數值,用藍色曲線表示。注意,下界與對數似然函數在 處以切線的方式連接,因此兩條曲線的梯度相同。這個界是一個凹函數,對於指數族分布的混合分布來說,有唯一的最大值。在M步驟中,下界被最大化,得到了新的值 ,這個值給出了比 處更大的對數似然函數值。接下來的E步驟構建了一個新的下界,它在 處與對數似然函數切線連接,用綠色曲線表示。以這樣的方式不停迭代,直到滿足條件。
了解了EM演算法,我們來詳細推導高斯混合模型的E步和M步的內容。這一部分內容來自徐亦達老師的課件。由於公式太多了,我就放一些截圖,供大家一起學習和參考。
徐亦達老師的課件在: https://github.com/roboticcam/machine-learning-notes/blob/master/em.pdf
後續關於EM演算法的應用會舉例以下幾方面內容
(1)Kmeans和高斯混合模型
(2)EM演算法應用之貝葉斯線性回歸
(3)EM演算法應用之PLSA
(4)EM演算法應用之缺失數據參數估計問題
㈡ 周易中的具體演算法~~~
50根取出一根不用。(還有49根。然後分為兩分,再從著兩份中取出一根放在一邊。這兩分應該總共48根,然後這兩份分別除4後的余數。一邊為1的話。另一邊一定為3,一邊為2的話。另一邊一定為2,一邊無余的話,另一邊也無余。這樣將兩邊的余數放到一邊。將手裡的兩份合並),這就叫一易,然後再重復上述括弧內過程。取一分二除四。如此三易,將剩下的合並後除4,得到的必定為6,7,8,9,這樣就得到了一爻。如此十八易得一卦。
註:如果余數無為4,也要一邊取出4根
㈢ 誰幫我介紹下加密對稱演算法
A.對稱加密技術 a. 描述 對稱演算法(symmetric algorithm),有時又叫傳統密碼演算法,就是加密密鑰能夠從解密密鑰中推算出來,同時解密密鑰也可以從加密密鑰中推算出來。而在大多數的對稱演算法中,加密密鑰和解密密鑰是相同的。所以也稱這種加密演算法為秘密密鑰演算法或單密鑰演算法。它要求發送方和接收方在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都可以對他們發送或接收的消息解密,所以密鑰的保密性對通信性至關重要。 b.特點分析 對稱加密的優點在於演算法實現後的效率高、速度快。 對稱加密的缺點在於密鑰的管理過於復雜。如果任何一對發送方和接收方都有他們各自商議的密鑰的話,那麼很明顯,假設有N個用戶進行對稱加密通信,如果按照上述方法,則他們要產生N(N-1)把密鑰,每一個用戶要記住或保留N-1把密鑰,當N很大時,記住是不可能的,而保留起來又會引起密鑰泄漏可能性的增加。常用的對稱加密演算法有DES,DEA等。 B.非對稱加密技術 a.描述 非對稱加密(dissymmetrical encryption),有時又叫公開密鑰演算法(public key algorithm)。這種加密演算法是這樣設計的:用作加密的密鑰不同於用作解密的密鑰,而且解密密鑰不能根據加密密鑰計算出來(至少在合理假定的長時間內)。之所以又叫做公開密鑰演算法是由於加密密鑰可以公開,即陌生人可以得到它並用來加密信息,但只有用相應的解密密鑰才能解密信息。在這種加密演算法中,加密密鑰被叫做公開密鑰(public key),而解密密鑰被叫做私有密鑰(private key)。 b.特點分析 非對稱加密的缺點在於演算法實現後的效率低、速度慢。 非對稱加密的優點在於用戶不必記憶大量的提前商定好的密鑰,因為發送方和接收方事先根本不必商定密鑰,發放方只要可以得到可靠的接收方的公開密鑰就可以給他發送信息了,而且即使雙方根本互不相識。但為了保證可靠性,非對稱加密演算法需要一種與之相配合使用的公開密鑰管理機制,這種公開密鑰管理機制還要解決其他一些公開密鑰所帶來的問題。常用的非對稱加密演算法有RSA等。 (3) 關於密碼技術 密碼技術包括加密技術和密碼分析技術,也即加密和解密技術兩個方面。在一個新的加密演算法的研發需要有相應的數學理論證明,證明這個演算法的安全性有多高,同時還要從密碼分析的角度對這個演算法進行安全證明,說明這個演算法對於所知的分析方法來說是有防範作用的。 三、對稱加密演算法分析 對稱加密演算法的分類 對稱加密演算法可以分成兩類:一類為序列演算法(stream algorithm):一次只對明文中單個位(有時為位元組)加密或解密運算。另一類為分組演算法(block algorithm):一次明文的一組固定長度的位元組加密或解密運算。 現代計算機密碼演算法一般採用的都是分組演算法,而且一般分組的長度為64位,之所以如此是由於這個長度大到足以防止分析破譯,但又小到足以方便使用。 1.DES加密演算法 (Data Encryption Standard )
(1) 演算法簡介
1973 年 5 月 15 日,美國國家標准局 (NBS) 在「聯邦注冊」上發布了一條通知,徵求密碼演算法,用於在傳輸和存儲期間保護數據。IBM 提交了一個候選演算法,它是 IBM 內部開發的,名為 LUCIFER。在美國國家安全局 (NSA) 的「指導」下完成了演算法評估之後,在 1977 年 7 月 15 日,NBS 採納了 LUCIFER 演算法的修正版作為新的數據加密標准。
原先規定使用10年,但由於新的加密標准還沒有完成,所以DES演算法及其的變形演算法一直廣泛的應用於信息加密方面。 (2) 演算法描述 (包括加密和解密)
Feistel結構(畫圖說明)。
DES 的工作方式:可怕的細節
DES 將消息分成 64 位(即 16 個十六進制數)一組進行加密。DES 使用「密鑰」進行加密,從符號的角度來看,「密鑰」的長度是 16 個十六進制數(或 64 位)。但是,由於某些原因(可能是因為 NSA 給 NBS 的「指引」),DES 演算法中每逢第 8 位就被忽略。這造成密鑰的實際大小變成 56 位。編碼系統對「強行」或「野蠻」攻擊的抵抗力與其密鑰空間或者系統可能有多少密鑰有直接關系。使用的位數越多轉換出的密鑰也越多。密鑰越多,就意味著強行攻擊中計算密鑰空間中可能的密鑰范圍所需的時間就越長。從總長度中切除 8 位就會在很大程度上限制了密鑰空間,這樣系統就更容易受到破壞。
DES 是塊加密演算法。這表示它處理特定大小的純文本塊(通常是 64 位),然後返回相同大小的密碼塊。這樣,64 位(每位不是 0 就是 1)有 264 種可能排列,DES 將生成其中的一種排列。每個 64 位的塊都被分成 L、R 左右兩塊,每塊 32 位。
DES 演算法使用以下步驟:
1. 創建 16 個子密鑰,每個長度是 48 位。根據指定的順序或「表」置換 64 位的密鑰。如果表中的第一項是 "27",這表示原始密鑰 K 中的第 27 位將變成置換後的密鑰 K+ 的第一位。如果表的第二項是 36,則這表示原始密鑰中的第 36 位將變成置換後密鑰的第二位,以此類推。這是一個線性替換方法,它創建了一種線性排列。置換後的密鑰中只出現了原始密鑰中的 56 位。
2. 接著,將這個密鑰分成左右兩半,C0 和 D0,每一半 28 位。定義了 C0 和 D0 之後,創建 16 個 Cn 和 Dn 塊,其中 1<=n<=16。每一對 Cn 和 Dn 塊都通過使用標識「左移位」的表分別從前一對 Cn-1 和 Dn-1 形成,n = 1, 2, ..., 16,而「左移位」表說明了要對哪一位進行操作。在所有情況下,單一左移位表示這些位輪流向左移動一個位置。在一次左移位之後,28 個位置中的這些位分別是以前的第 2、3……28 位。
通過將另一個置換表應用於每一個 CnDn 連接對,從而形成密鑰 Kn,1<=n<=16。每一對有 56 位,而置換表只使用其中的 48 位,因為每逢第 8 位都將被忽略。
3. 編碼每個 64 位的數據塊。
64 位的消息數據 M 有一個初始置換 IP。這將根據置換表重新排列這些位,置換表中的項按這些位的初始順序描述了它們新的排列。我們以前見過這種線性表結構。
使用函數 f 來生成一個 32 位的塊,函數 f 對兩個塊進行操作,一個是 32 位的數據塊,一個是 48 位的密鑰 Kn,連續迭代 16 次,其中 1<=n<=16。用 + 表示 XOR 加法(逐位相加,模除 2)。然後,n 從 1 到 16,計算 Ln = Rn-1 Rn = Ln-1 + f(Rn-1,Kn)。即在每次迭代中,我們用前一結果的右邊 32 位,並使它們成為當前步驟中的左邊 32 位。對於當前步驟中的右邊 32 位,我們用演算法 f XOR 前一步驟中的左邊 32 位。
要計算 f,首先將每一塊 Rn-1 從 32 位擴展到 48 位。可以使用選擇表來重復 Rn-1 中的一些位來完成這一操作。這個選擇表的使用就成了函數 f。因此 f(Rn-1) 的輸入塊是 32 位,輸出塊是 48 位。f 的輸出是 48 位,寫成 8 塊,每塊 6 位,這是通過根據已知表按順序選擇輸入中的位來實現的。
我們已經使用選擇表將 Rn-1 從 32 位擴展成 48 位,並將結果 XOR 密鑰 Kn。現在有 48 位,或者是 8 組,每組 6 位。每組中的 6 位現在將經歷一次變換,該變換是演算法的核心部分:在叫做「S 盒」的表中,我們將這些位當作地址使用。每組 6 位在不同的 S 盒中表示不同的地址。該地址中是一個 4 位數字,它將替換原來的 6 位。最終結果是 8 組,每組 6 位變換成 8 組,每組 4 位(S 盒的 4 位輸出),總共 32 位。
f 計算的最後階段是對 S 盒輸出執行置換 P,以得到 f 的最終值。f 的形式是 f = P(S1(B1)S2(B2)...S8(B8))。置換 P 根據 32 位輸入,在以上的過程中通過置換輸入塊中的位,生成 32 位輸出。
解密只是加密的逆過程,使用以上相同的步驟,但要逆轉應用子密鑰的順序。DES 演算法是可逆的
(2) 演算法的安全性分析
在知道一些明文和密文分組的條件下,從理論上講很容易知道對DES進行一次窮舉攻擊的復雜程度:密鑰的長度是56位,所以會有 種的可能的密鑰。
在1993年的一年一度的世界密碼大會上,加拿大北方電信公司貝爾實驗室的 Michael Wiener 描述了如何構造一台專用的機器破譯DES,該機器利用一種每秒能搜索5000萬個密鑰的專用晶元。而且此機器的擴展性很好,投入的經費越多則效率越高。用100萬美元構造的機器平均3.5小時就可以破譯密碼。
如果不用專用的機器,破譯DES也有其他的方法。在1994年的世界密碼大會上,M.Matsui 提出一種攻克DES的新方法--"線性密碼分析"法。它可使用平均 個明文及其密文,在12台HP9000/735工作站上用此方法的軟體實現,花費50天時間完成對DES的攻擊。
如前所述DES作為加密演算法的標准已經二十多年了,可以說是一個很老的演算法,而在新的加密演算法的國際標准出現之前,許多DES的加固性改進演算法仍有實用價值,在本文的3.4節詳細的描述,同時考慮的以上所述DES的安全性已受到了威脅。
(4) 演算法的變體 三重DES(TDEA),使用3個密鑰,執行3次DES演算法:
加密:C = Ek3[Dk2[Ek1[P]]] 解密:P = Dk1[Ek2[Dk3[C]]]
特點:安全性得到增強,但是速度變慢。
2.AES
自 20 世紀 70 年代以來一直廣泛使用的「數據加密標准」(DES) 日益顯出衰老的痕跡,而一種新的演算法 -- Rijndael -- 正順利地逐漸變成新標准。這里,Larry Loeb 詳細說明了每一種演算法,並提供了關於為什麼會發生這種變化的內幕信息。
DES 演算法是全世界最廣泛使用的加密演算法。最近,就在 2000 年 10 月,它在其初期就取得的硬體方面的優勢已經阻礙了其發展,作為政府加密技術的基礎,它已由「高級加密標准」(AES) 中包含的另一種加密演算法代替了。AES 是指定的標准密碼系統,未來將由政府和銀行業用戶使用。AES 用來實際編碼數據的加密演算法與以前的 DES 標准不同。我們將討論這是如何發生的,以及 AES 中的 Rijndael 演算法是如何取代 DES 的演算法的。
「高級加密標准」成就
但直到 1997 年,美國國家標准技術局 (NIST) 才開始打著 AES 項目的旗幟徵集其接任者。1997 年 4 月的一個 AES 研討會宣布了以下 AES 成就的最初目標:
• 可供政府和商業使用的功能強大的加密演算法
• 支持標准密碼本方式
• 要明顯比 DES 3 有效
• 密鑰大小可變,這樣就可在必要時增加安全性
• 以公正和公開的方式進行選擇
• 可以公開定義
• 可以公開評估
AES 的草案中最低可接受要求和評估標準是:
A.1 AES 應該可以公開定義。
A.2 AES 應該是對稱的塊密碼。
A.3 AES 應該設計成密鑰長度可以根據需要增加。
A.4 AES 應該可以在硬體和軟體中實現。
A.5 AES 應該 a) 可免費獲得。
A.6 將根據以下要素評價符合上述要求的演算法:
1. 安全性(密碼分析所需的努力)
2. 計算效率
3. 內存需求
4. 硬體和軟體可適用性
5. 簡易性
6. 靈活性
7. 許可證需求(見上面的 A5)
Rijndael:AES 演算法獲勝者
1998年8月20日NIST召開了第一次AES侯選會議,並公布了15個AES侯選演算法。經過一年的考察,MARS,RC6,Rijndael,Serpent,Twofish共5種演算法通過了第二輪的選拔。2000 年 10 月,NIST 選擇 Rijndael(發音為 "Rhine dale")作為 AES 演算法。它目前還不會代替 DES 3 成為政府日常加密的方法,因為它還須通過測試過程,「使用者」將在該測試過程後發表他們的看法。但相信它可以順利過關。
Rijndael 是帶有可變塊長和可變密鑰長度的迭代塊密碼。塊長和密鑰長度可以分別指定成 128、192 或 256 位。
Rijndael 中的某些操作是在位元組級上定義的,位元組表示有限欄位 GF(28) 中的元素,一個位元組中有 8 位。其它操作都根據 4 位元組字定義。
加法照例對應於位元組級的簡單逐位 EXOR。
在多項式表示中,GF(28) 的乘法對應於多項式乘法模除階數為 8 的不可約分二進制多項式。(如果一個多項式除了 1 和它本身之外沒有其它約數,則稱它為不可約分的。)對於 Rijndael,這個多項式叫做 m(x),其中:m(x) = (x8 + x4 + x3 + x + 1) 或者十六進製表示為 '11B'。其結果是一個階數低於 8 的二進制多項式。不像加法,它沒有位元組級的簡單操作。
不使用 Feistel 結構!
在大多數加密演算法中,輪回變換都使用著名的 Feistel 結構。在這個結構中,中間 State 的位部分通常不做更改調換到另一個位置。(這種線性結構的示例是我們在 DES 部分中討論的那些表,即使用固定表的形式交換位。)Rijndael 的輪回變換不使用這個古老的 Feistel 結構。輪回變換由三個不同的可逆一致變換組成,叫做層。(「一致」在這里表示以類似方法處理 State 中的位。)
線性混合層保證了在多個輪回後的高度擴散。非線性層使用 S 盒的並行應用,該應用程序有期望的(因此是最佳的)最差非線性特性。S 盒是非線性的。依我看來,這就 DES 和 Rijndael 之間的密鑰概念差異。密鑰加法層是對中間 State 的輪回密鑰 (Round Key) 的簡單 EXOR,如以下所注。
Rijndael演算法
加密演算法
Rijndael演算法是一個由可變數據塊長和可變密鑰長的迭代分組加密演算法,數據塊長和密鑰長可分別為128,192或256比特。
數據塊要經過多次數據變換操作,每一次變換操作產生一個中間結果,這個中間結果叫做狀態。狀態可表示為二維位元組數組,它有4行,Nb列,且Nb等於數據塊長除32。如表2-3所示。
a0,0 a0,1 a0,2 a0,3 a0,4 a0,5
a1,0 a1,1 a1,2 a1,3 a1,4 a1,5
a2,0 a2,1 a2,2 a2,3 a2,4 a2,5
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5
數據塊按a0,0 , a1,0 , a2,0 , a3,0 , a0,1 , a1,1 , a2,1 , a3,1 , a0,2…的順序映射為狀態中的位元組。在加密操作結束時,密文按同樣的順序從狀態中抽取。
密鑰也可類似地表示為二維位元組數組,它有4行,Nk列,且Nk等於密鑰塊長除32。演算法變換的圈數Nr由Nb和Nk共同決定,具體值列在表2-4中。
表3-2 Nb和Nk決定的Nr的值
Nr Nb = 4 Nb = 6 Nb = 8
Nk = 4 10 12 14
Nk = 6 12 12 14
Nk = 8 14 14 14
3.2.1圈變換
加密演算法的圈變換由4個不同的變換組成,定義成:
Round(State,RoundKey)
{
ByteSub(State);
ShiftRow(State);
MixColumn(State);
AddRoundKey(State,RoundKey); (EXORing a Round Key to the State)
}
加密演算法的最後一圈變換與上面的略有不同,定義如下:
FinalRound(State,RoundKey)
{
ByteSub(State);
ShiftRow(State);
AddRoundKey(State,RoundKey);
}
ByteSub變換
ByteSub變換是作用在狀態中每個位元組上的一種非線形位元組變換。這個S盒子是可逆的且由以下兩部分組成:
把位元組的值用它的乘法逆替代,其中『00』的逆就是它自己。
經(1)處理後的位元組值進行如下定義的仿射變換:
y0 1 1 1 1 1 0 0 0 x0 0
y1 0 1 1 1 1 1 0 0 x1 1
y2 0 0 1 1 1 1 1 0 x2 1
y3 0 0 0 1 1 1 1 1 x3 0
y4 = 1 0 0 0 1 1 1 1 x4 + 0
y5 1 1 0 0 0 1 1 1 x5 0
y6 1 1 1 0 0 0 1 1 x6 1
y7 1 1 1 1 0 0 0 1 x7 1
ShiftRow變換
在ShiftRow變換中,狀態的後3行以不同的移位值循環右移,行1移C1位元組,行2移C2位元組,行3移C3位元組。
移位值C1,C2和C3與加密塊長Nb有關,具體列在表2-5中:
表3-3 不同塊長的移位值
Nb C1 C2 C3
4 1 2 3
MixColumn變換
在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式與一固定多項式c(x)相乘然後模多項式x4+1,其中c(x)為:
c(x) =『03』x3 + 『01』x2 + 『01』x + 『02』
圈密鑰加法
在這個操作中,圈密鑰被簡單地使用異或操作按位應用到狀態中。圈密鑰通過密鑰編製得到,圈密鑰長等於數據塊長Nb。
在這個表示法中,「函數」(Round, ByteSub, ShiftRow,...) 對那些被提供指針 (State, RoundKey) 的數組進行操作。ByteSub 變換是非線性位元組交換,各自作用於每個 State 位元組上。在 ShiftRow 中,State 的行按不同的偏移量循環移位。在 MixColumn 中,將 State 的列視為 GF(28) 多項式,然後乘以固定多項式 c( x ) 並模除 x4 + 1,其中 c( x ) = '03' x3 + '01' x2+ '01' x + '02'。這個多項式與 x4 + 1 互質,因此是可逆的。
輪回密鑰通過密鑰計劃方式從密碼密鑰 (Cipher Key) 派生而出。它有兩個組件:密鑰擴展 (Key Expansion) 和輪回密鑰選擇 (Round Key Selection)。輪回密鑰的總位數等於塊長度乘以輪回次數加 1(例如,塊長度等於 128 位,10 次輪回,那麼就需要 1408 個輪回密鑰位)。
密碼密鑰擴充成擴展密鑰 (Expanded Key)。輪回密鑰是通過以下方法從這個擴展密鑰中派生的:第一個輪回密鑰由前 Nb(Nb = 塊長度)個字組成,第二個由接著的 Nb 個字組成,以此類推。
加密演算法由以下部分組成:初始輪回密鑰加法、Nr-1 個輪回和最後一個輪回。在偽 C 代碼中:
Rijndael(State,CipherKey)
{
KeyExpansion(CipherKey,ExpandedKey);
AddRoundKey(State,ExpandedKey);
For( i=1 ; i<Nr ; i++ ) Round(State,ExpandedKey + Nb*i);
FinalRound(State,ExpandedKey + Nb*Nr).
}
如果已經預先執行了密鑰擴展,則可以根據擴展密鑰指定加密演算法。
Rijndael(State,ExpandedKey)
{
AddRoundKey(State,ExpandedKey);
For( i=1 ; i<Nr ; i++ ) Round(State,ExpandedKey + Nb*i);
FinalRound(State,ExpandedKey + Nb*Nr);
}
由於 Rijndael 是可逆的,解密過程只是顛倒上述的步驟。
最後,開發者將仔細考慮如何集成這種安全性進展,使之成為繼 Rijndael 之後又一個得到廣泛使用的加密演算法。AES 將很快應一般商業團體的要求取代 DES 成為標准,而該領域的發展進步無疑將追隨其後。
3.IDEA加密演算法 (1) 演算法簡介 IDEA演算法是International Data Encryption Algorithmic 的縮寫,意為國際數據加密演算法。是由中國學者朱學嘉博士和著名密碼學家James Massey 於1990年聯合提出的,當時被叫作PES(Proposed Encryption Standard)演算法,後為了加強抵抗差分密碼分,經修改於1992年最後完成,並命名為IDEA演算法。 (2) 演算法描述 這個部分參見論文上的圖 (3) 演算法的安全性分析 安全性:IDEA的密鑰長度是128位,比DES長了2倍多。所以如果用窮舉強行攻擊的話, 么,為了獲得密鑰需要 次搜索,如果可以設計一種每秒能搜索十億把密鑰的晶元,並且 採用十億個晶元來並行處理的話,也要用上 年。而對於其他攻擊方式來說,由於此演算法 比較的新,在設計時已經考慮到了如差分攻擊等密碼分析的威脅,所以還未有關於有誰 發現了能比較成功的攻擊IDEA方法的結果。從這點來看,IDEA還是很安全的。
4.總結
幾種演算法的性能對比
演算法 密鑰長度 分組長度 循環次數
DES 56 64 16
三重DES 112、168 64 48
AES 128、192、256 128 10、12、14
IDEA 128 64 8
速度:在200MHz的奔騰機上的對比。
C++ DJGP(++pgcc101)
AES 30.2Mbps 68.275Mbps
DES(RSAREF) 10.6Mbps 16.7Mbps
3DES 4.4Mbps 7.3Mbps
Celeron 1GHz的機器上AES的速度,加密內存中的數據
128bits密鑰:
C/C++ (Mbps) 匯編(Mbps)
Linux 2.4.7 93 170
Windows2K 107 154
256bits密鑰:
C/C++ (Mbps) 匯編(Mbps)
Linux 2.4.7 76 148
Windows2K 92 135
安全性
1990年以來,特製的"DES Cracker"的機器可在幾個小時內找出一個DES密鑰。換句話說,通過測試所有可能的密鑰值,此硬體可以確定用於加密信息的是哪個密鑰。假設一台一秒內可找出DES密鑰的機器(如,每秒試255個密鑰),如果用它來找出128-bit AES的密鑰,大約需要149萬億年。
四、對稱加密應用 在保密通信中的應用。(保密電話) 附加內容
安全哈希演算法(SHA)
由NIST開發出來的。
此演算法以最大長度不超過264位的消息為輸入,生成160位的消息摘要輸出。主要步驟:
1. 附加填充位
2. 附加長度
3. 初始化MD緩沖區,為160位的數據
A=67452301
B=EFCDAB89
C=89BADCFE
D=10325476
E=C3D2E1F0
4. 處理512位消息塊,將緩沖虛數據和消息塊共同計算出下一個輸出
5. 輸出160位摘要
此外還有其他哈希演算法,如MD5(128位摘要),RIPEMD-160(160位摘要)等。
㈣ 上證指數的計算方法
我國股票大盤指數是指滬市的「上證綜合指數」和深市的「深證成份股指數」。上證綜合指數:以上海證券交易所掛牌上市的全部股票(包括A股和B股)為樣本,以發行量為權數(包括流通股本和非流通股本),以加權平均法計算,以1990年12月19日為基日,基日指數定為100點的股價指數。深證成份股指數:從深圳證券交易所掛牌上市的所有股票中抽取具有市場代表性的40家上市公司的股票為樣本,以流通股本為權數,以加權平均法計算,以1994年7月20日為基日,基日指數定為1000點的股價指數。
㈤ 小學數學演算法多樣性與雙基的關系
一、了解我們的課標(是我們數學教師教學的憲法,是我們的方向盤)
只有對課標理解透徹、具體,才能靈活處理好知識、技能、能力三者之間的關系,才能提高數學課堂教學的有效性。
「雙基」變「四基」的理解:
「雙基」這個詞對每位老師來說,特別是用過「九義」教材的老師來說,早已耳熟能詳,隨著課改的推進,教改的不斷深入,為了適應時代的需要,使「雙基」的內容更豐富,「雙基」現在已擴展為「四基」——基本知識、基本技能、基本思想、基本活動經驗。很多學者將「四基」譽為《標准》修改的神來之筆。因為「四基」更強調的是學生兩種能力的培養:即發現問題和提出問題的能力,分析問題和解決問題的能力,兩種能力既體現了學生創新學習的基本過程,也是一個完整探索、研究的過程。
「基本思想」主要是指演繹和歸納,這應當是整個數學教學的主線。演繹和歸納不是矛盾的,其教學也不是矛盾的, 通過歸納來預測結果,然後通過演繹來驗證結果。在具體的問題中,會涉及到數學抽象、數學模型、等量替換、數形結合等數學思想,但最上位的思想還是演繹和歸納。
之所以用「基本思想」而不用基本思想方法,就是要與換元法、遞歸法、配方法等具體的數學方法區別。每一個具體的方法可能是重要的,但不具有一般性,作為一種思想掌握是不必要的,經過一段時間,學生很可能就忘卻了。這里所說的思想,是希望學生領會之後能夠終生受益的那種思想方法。
數與代數(一、二、四、六、八單元)
(1) 重視培養學生的數感
(2) 重視口算;
(3) 重視演算法多樣化;
(4) 注重估算意義和能力的培養;
(5) 重視數學應用意識和能力的培養
圖形與幾何(三、五、七單元)
(1) 重視發展學生的空間觀念
(2) 重視動手操作;
統計與概率(第九單元)
(1) 重視培養學生初步的統計觀念;
(2) 重視對統計實際意義的理解;
(3) 重視可能性,滲透概率思想;
綜合與實踐(走進鄉村、美麗的植物園,加上各單元中的七個實踐活動,共計九個)通過系列實踐活動,學生初步獲得一些數學活動的經驗,了解數學在日常生活中的簡單應用;初步學會與他人合作交流,獲得積極的數學學習情感。 (二)教材內容的必要說明;
1、「派車」一課,怎樣派車比較合理?教材中的意圖是空位越少越合理。我們認為還要考慮客觀現實,如:價錢問題,管理問題等綜合因素。感覺此問題情景不切合生活實際。另外,《派車》一課教學內容難度較大,不符合兒童年齡認知特點。
「派車」的合理性要考慮很多因素,在二年級下冊只考慮空座位盡量少的問題,有些學生想到都坐麵包車或小轎車便於管理,當然可以。關於價錢問題安排在三年級下冊「旅遊中的數學」,這樣也體現了有一定的層次性。
2、課本中提問題注意嚴密。課本第8頁第5題:一塊花布長25米,做一套衣服用3米,最多能做幾套衣服?這道題的設計意圖是25÷3=8(套)……1(米),最多能做8套衣服,還剩的1米不夠做一套衣服。教學時,有學生提出質疑,還剩的1米還能做一件小衣服,如果扔了太浪費。因此,這道題應改為一塊花布長25米,做一套衣服用3米,你認為最多能做幾套這樣的衣服,為什麼?
你的意見很好,添上「這樣」兩個字,避免引起疑義。
3、第四單元「生活中的大數」,書中沒有給出大數讀寫規則及注意事項,專家意見是讓學生去理解和體會這些規則和注意事項,我們不太認同這一點,此知識在學習過程中本來就是難點,學生若能在規則和注意事項的指導下學習,會更易於突破此難點,否則老師在教學時困難較大。
讀數和寫數從高位起,先讀、寫高位,再讀、寫低位,在百以內數讀寫中已有接觸,萬以內數的讀寫主要是中間或末尾有0數是難點,教材在撥一撥的4個問題中突出了這一難點,學生經歷了撥一撥、數一數、寫一寫、讀一讀的過程,教材最後讓學生「想一想」自己總結讀數和寫數時應注意什麼?這樣安排,發揮學生的主動性。另外讀數和寫數是一種技能,光*背誦規則是解決不了問題的,要*練習,一堂課的練習有限,後面的內容「比一比」以及計算中,都是練習讀寫數的機會,應充分利用。
4、第二單元的混合運算中的兩步應用題如果在前面練習中逐步滲透,分步計算,然後在第二單元在列綜合算式,引出混合運算,難度要降低很多,學生接受的也會更好。
你的意見很好,前面練習逐步滲透會好一些,咱們教材注意了這一點,如在一年級下冊安排了一些連續兩問的應用題如67頁第9題,74頁第(1)(2)題,93頁第4題。但是做的還不夠,在修改教材時加以改進。
5、認識路線這部分內容,書上路線圖都太規整,這與生活實際有些不符,而且缺少圖上方向與生活方向的結合。學生能准確的認識圖上的路線,而在生活實際未必能熟練辨認方向。
您提的問題很實際,有時能看懂圖上的方向,但在實際生活中卻暈頭轉向,方向感是需要逐步建立的。對於低年級孩子能看懂比較規整的路線圖就可以了,您說呢?
6、書上的某些估算有些脫離實際,讓教師的教無從下手,不知道估算的具體標准和方法是什麼,如課本41頁的實踐活動《有多少片樹葉》.41頁的實踐活動,是一項估計活動,使學生體會到可以通過部分估計整體。組織這一活動時,,可以先讓學生估計50片或100片佔多大的地方,再估計所有樹葉有多少片。在數一數時,可以讓學生想一想,怎樣數得又對又快,設法表示出來。學生可以兩行兩行地數,即30片30片地數;也可以10片10片地數圈起來是100片,圈成兩圈,還剩下20片及5片,一共225片
7、如何建立算式與操作之間的聯系? 如何引導學生在操作的同時進行思維的提升?
同第8題
8、除法學習中,如何讓學生的動手操作和列豎式有效的結合?
您這個問題提得很好,動手操作必須和算式相結合,兩者脫節是我們教學中容易出現的問題,怎樣進行有效結合呢?如第2頁的「分蘋果」,先可以讓學生分一分,在列豎式時要讓學生知道每一步的含義,可以一邊列豎式,一邊演示,也可以用語言喚起學生的回憶,20表示要分的20個蘋果,5表示每盤放5個,商4表示分的結果是放了4盤,驗證一下,每盤5個放了4盤,一共是多少,4和5的乘積是20,寫在蘋果總數的下面,相減得0,表示全部分完了。
9、在學習有餘數除法中,如何提高學生試商的能力?
( )里最大能填幾的練習是提高學生試商能力的好方法,也可以培養學生的數感和估計能力,如()×8<44,通過多次練習,學生感覺到不可能填1、2、3、4,因為和8相乘的積離44太遠,五八四十,和44比較接近,六八四十八,超過了44,( )里填5。學生在多次實際計算中逐步提高試商的能力。
10、1千米有多長?推想和感受之間有何差異?如何實現學生對1千米的感受?
1千米有多長比較抽象,因此用推想的方法幫助學生感受1千米有多長。如,先通過同學們手拉手站成一排,用米尺量一量,體會10米大約有多長,再推想一下多少名同學手拉手站成一排,大約有100米。也可以量出10米的距離,讓學生自然地走一走,大約有多少步,再推想100米大約有多少步,想像一下100米有多長。在對100米有多長有了感性認識的基礎上,再來想像1千米有多長,如10個100米那麼長就是1千米。也可以選擇兩個學生熟悉的建築物之間的距離說明是1千米,或幾個那麼長是1千米,老師們可以因地制宜,總之要通過具體情境,幫助學生體會1千米有多長。
11、學習的長度單位越來越多,教師要怎樣培養學生正確的估測物體的長度?
主要幫助學生體會每種長度單位的實際意義,把每種單位和他熟悉事物的長度聯系起來,如1分米,學生就想到有手掌那麼長,1毫米就想到有1分硬幣那麼厚,1千米就想到從學校到某一處他熟悉的地方那麼遠。因此在學習這些測量單位時,一定要讓學生動手操作,充分感受,在實際測量中加深理解,提供機會讓學生估測,幫助學生積累估測的經驗,同時又能加深學生對長度單位實際意義的理解。
12、豎式是如何產生的?
豎式又叫算草,在計算數目比較大的數時,用口算比較困難,不容易記住計算過程中的數,就要利用豎式筆錄下來,豎式就是把計算過程格式化和順序化了,減少記憶的難度,對計算有一定的作用,因此要讓學生正確掌握。豎式的格式在國內外,古代和現代都不盡相同的,既然是一個草稿,因此在格式上不必要求過細,如進、退位點寫不寫,寫的位置等,因人制宜就可以了。
13、第19頁過河問題:如果學生出現29÷9=3……2 25÷9=2……7 2+7=9 3+2+1=6 這種答案,該如何往小括弧方面引導?
首先肯定這種想法是對的,男生需要幾條船,女生需要幾條船,再把男、女生剩下的合在一起坐一條船,這種想法很符合生活中處理這一問題的次序。然後再引導學生還可以怎樣想,把男女生人數合在一起,再看需要幾條船,這樣只需要兩步,在把兩個算式合在一起時,需要小括弧幫忙。
14、「有餘數的除法」的應用,學生的理解不透徹,並且不能完整地書寫算式、單位名稱和答。有沒有好的經驗?
有餘數除法橫式上商和余數的寫法,在式子題中學生已經掌握了,在「有餘數除法」應用中主要是單位名稱的寫法,可以引導學生根據問題來選擇單位名稱,如問題「可以裝幾盒,還剩幾個?」商的單位名稱是「盒」,余數是「個」。
15、本學期是教材中第一次要求學生畫線段,而且是在練習中出現的,我們是否要要求學生畫出線段的端點並標出長度?
畫圖是一種解題策略,可以畫實物圖,也可以畫線段圖,它用於幫助學生分析數量關系,是一種手段,不應作為解題格式的正規要求。第64頁練習中的第5題,教材中畫出線段圖,是為了幫助學生理解數量關系,而不是要求學生自己畫線段圖。
16、在教學有關里程錶的知識時,如:北京—天津的里程是137千米,北京—濟南的里程是497千米,問天津到濟南有多少千米?對於這樣的問題總有部分學生不理解,如何突破這一難點?
第66頁12題在里程錶的左面有一幅鐵路線圖,這幅圖起到線段圖的作用,可以幫助學生理解里程錶。教師可以進行圖、表對照,幫助學生看懂里程錶,回答書中的(1)個問題,在解答第(2)個問題時,可以對照鐵路線圖,使學生體會到是從整體里去掉一部分,用減法進行解答。
17、教材中79頁的實踐活動應該如何指導學生泡豆,才能使豆芽不發霉,實驗成功?
要及時觀察,適時換水,濕布及時清洗。
18、課本第72頁的長方形與正方形一節中,想一想,推一推,拉一拉,觀察信紙的變化,你發現了什麼。本題的意圖是讓學生在推拉的過程中發現信紙由長方形變成正方形再變成長方形,但學生畢竟是用肉眼來觀察,沒有準確的測量,在拉的過程中,有的學生認為已經變成正方形了,但有的學生還要求再拉出一些才是正方形,這個地方學生有爭議。如何處理?
學生發生爭議時,可以用尺子量一量,四邊是否相等,確定是不是正方形。
19、認識圖形:(1)一個圖形有幾個角?是只數圖形內部的角?還是圖形內外的角都包括?教材裡面沒有具體的概念。(2)數圖形的個數,學生在學習過程中感到很困難,老師多次講評仍沒有提高,授課感覺很困惑。
(1)只要求數圖形內部的角,有的學生指出圖形外部的角,可以肯定,但不作為全班要求;(教參P101有說明)
(2)教材73頁第3、4題數圖形的個數。第3題先數小正方形,再數由4個小正方形組成的大正方形,從而得出:2、5、8、11;然後進行觀察,從第二幅圖開始,每增加2個小正方形,就與它左邊相鄰的2個小正方形組成一個大正方形,因此後面的圖形比前面的圖形正方形個數增加3。第4題引導學生有序地數,先數小長方形有4個,再數由兩個長方形組成的長方形有4個,還要一個有4個長方形組成的大長方形,一共有9個。
20、第7、8頁,解決問題計算中出現有餘數現象,大部分學生經常對答案的理解出現困惑,因為有些需要對計算結果做進一步處理--需要捨去余數,按照計算結果來回答。如何培養學生分析答案合理性的能力?
可以引導學生結合實際來想,如第7頁的21人去劃船,每條船限坐4人,至少租幾條船?當學生列出算式21÷4=5(條)……1(人)時,因為每條船隻能坐4人,必須多租一條船,答案要寫「至少要租5條船。」試一試「中,每條船每時租金3元,10元最多可以劃幾時?當學生列出算式10÷3=3(時)……1(元)時,因為每時租金3元,剩下1元不能劃1時,答案要寫」最多劃3時「。
21、課本第8頁練一練:一瓶水可以到6杯,28位客人至少需要幾瓶水?在練習過程中,學生出現了爭議:其中一部分學生認為28位客人需要28杯水,每六杯水為一瓶,應該商4,余數為4,單位名稱是杯。另一部分學生認為28位客人應餘下4人沒水喝,余數的單位名稱應該是人。學生說的都有道理,教師應該如何評價?
我也認為都有道理,只要他在答案中說明「至少需要5瓶水「就可以了。
22、本冊教材第一次出現兩步應用題,相對於一步應用題,條件較多,學生理解會有一定難度,教學時怎麼有效引導學生正確分析信息解決問題
在一年級下冊安排了一些連續兩問的應用題如67頁第9題,74頁第(1)(2)題,93頁第4題。還有一些在情境圖有多種信息,讓學生選擇合適的信息解答一步應用題,作了一些孕伏。這一冊混合運算中有兩步應用題,題目的素材都是學生熟悉的,結合生活實際容易理解的,這一冊是初步接觸,到了三年級再正式展開。 23、怎樣在具體情境中,使學生體會到混合運算要遵循一定的順序?
第二單元「混合運算」是在學生學習了加、減、乘、除法的基礎上進行的,包括乘加、乘減、除加、除減及帶有小括弧的混合運算,以及在實際問題中的綜合應用。教材是通過具體情景,使學生體會到混合運算要遵循一定的順序,以及在計算時怎樣運用這些順序。首先,教材創設了「小熊購物」這樣一個問題情境。在解答「胖胖要買4個麵包和1瓶飲料,需付多少錢」時,需要列兩個算式才能得出結果,當把兩個算式合在一起時就要遵循一定的運算順序。結合解決問題的過程,是先算出4個麵包多少錢,再求4個麵包和一瓶飲料一共多少錢,因此,要先算乘,再算加。又如,教材創設了「過河」的情境,要解決「河岸上有男生29人,女生25人,每條船限坐9人,需要幾條船」的問題,就要先算出岸上一共有多少人,29+25=54(人);再求需要幾條船,54?=6(條)。當把兩個算式合在一起時,即29+25?,按照前面所學的運算順序,是先算除,再算加,這時就要請小括弧來幫忙了。
有一部分教師反映,這部分內容難點過於集中,要學習兩步計算的應用題、怎樣把分步列式合並為綜合算式、怎樣計算混合運算等三部分內容。需要指出的是,關於應用問題,本套教材不要求學生列綜合算式,學生會分步列式即可。對於運算順序和應用問題,教師可以根據本班學生的實際情況採取單元教學設計,在每一節課中側重某一方面。如果學生對某節課應用問題的數量關系比較熟悉,就可以把重點放在熟悉運算順序上;如果學生對應用問題的數量關系比較陌生,就應把重點放在這方面上。
24、如何提高「萬以內加減法」的運算技能?
探索並掌握整十、整百數的加減的口算及三位數加減法的計算方法,能正確計算並解決一些簡單的實際問題,是這部分內容學習的重要目標之一。如何提高萬以內加減法的基本運算技能呢?
第一,要讓學生在已經掌握百以內數加減法的基礎上,自主探索三位數加減法的計算方法,理解運算的道理。教材創設了「買電器」「回收廢電池」「小小圖書館」等情境,鼓勵學生從現實情境中發現問題、解決問題。由於學生的生活背景、知識經驗、思考問題的角度不同,學生進行三位數加減法計算時,所使用的方法可能不同。教材除了提供用計數器「撥一撥」和用豎式「算一算」外,還利用直觀模型,通過數形結合來幫助學生理解「數位要對齊,滿十進一和退一作十」的計算方法的道理。
第二,根據《全日制義務教育數學課程標准(實驗稿)》(以後簡稱《標准》)的要求,三位數加減法筆算每分鍾1~2題,教學時要根據這個標准鼓勵學生逐步達到,不要對速度提出過高要求。
第三,三位數加減法數目比較大,計算時容易發生錯誤。教材安排了有關驗算的內容,培養學生的驗算意識和習慣。
教材「小小圖書館(三位數筆算減法)」一節中安排「想一想」活動,結合生活情境(買鞋找錢)引導學生探索減法的驗算方法,使學生體會驗算的重要性,養成對自己的計算結果負責的習慣。需要指出的是,對於驗算,最重要的是培養學生的驗算意識,學生可以用逆運算來進行驗算,也可以通過用別的方法再算一遍進行驗算。
第四,教材在每部分計算內容中安排了「森林醫生」「趣味游戲」等形式多樣的練習,這些練習形式將有助於學生正確地進行計算。例如,「小小圖書館」中,把學生在三位數加減法計算中容易產生的錯誤列舉出來,讓學生當「森林醫生」——啄木鳥,找出錯誤原因,並進行改正。教師可以根據本班的情況,收集學生的計算錯誤,由學生自己當「森林醫生」來改正。同時引導學生不僅能治病,而且要學會防病,總結產生錯誤的原因。
第五,合理地安排練習階段。對於新學習的內容要及時練、及時反饋,因為遺忘是先快後慢的;注意集中練習與分散練習相結合,在後面單元的學習中,教師也需要適當地穿插有關的練習。
25、教材如何幫助學生認識抽象的「角」?
角是一個抽象的圖形,小學階段學習角主要是為了學習構成平面圖形的一個基本要素。由於角的抽象性,學生在認識角中存在著比較大的困難和大誤區,比如把生活中的桌角等和抽象的角混淆;比如把角看成一個區域,所以就感覺畫出的角「包含」的區域的面積大,角就大。鑒於此,建立數學中「角」的正確表象是本內容學習的重要目標。
為了幫助學生建立角的正確表象,教材首先突出了從生活情境中「抽象」出角的過程。在三幅圖中,既有畫出來的兩邊一樣長的情形,也有畫出來的兩邊不一樣長的情形。教師還可以舉一些畫出來的兩邊不一樣長的情形,以免學生認為角的兩邊都必須畫得一樣長。在此基礎上,教材安排了擺角的活動,目的有兩個:第一,由於用兩個小棒來擺角,有利於學生認識到角是由一個頂點和兩個邊組成的,使角與角所「包含」的區域剝離。第二,通過學生自己擺角,可以暴露出學生的錯誤認識,便於教師幫助學生澄清。然後,教材設計了認一認的活動,幫助學生建立角的正確表象。教師可以鼓勵學生畫出角,並進一步認識組成角的頂點和邊。
需要指出的是,本冊教材是對角的初步認識,學生能夠辨認出角,知道角的有一個頂點、兩條邊,並能正確指出頂點、邊即可。關於角的定義和進一步認識將在四年級學習。 三、備課的有效性問題與具體策略探討
首先,要確定一個基本目標:
目標的來源,一個是教材,一個是教參,我們老師在上課前,一定要瀏覽一下當堂課的教學目標,確保教學要求不要偏高,亦不要偏低,教材中提供的素材,能用上的,一定要盡可能的用上,不建議大幅度的調整;教參中的教學建議有時對目標的詮釋也很到位,相信大家看一看,就能做到心中有數。這樣教學就不會走偏。推薦大家必看的教參內容:單元學習內容的前後聯系(教參42頁)
例如:《數一數——認識新計數單位》一課,李冬老師設計如下:
教學目標:
1、通過生活實例,學生體會生活中有大數,感受學習大數的必要性,激發學習數學的興趣。
2、通過猜測、交流、推理等方法進行數正方體活動,認識新的計數單位「千」、「萬」,並了解單位之間的聯系。
3、通過收集資料,學生對大數有具體的感受,發展數感,培養學生的收集能力。
4、培養學生樂於探究、合作交流的意識。
其次,設計好一組問題:
一組有價值的序列問題設計,會讓備課簡約而不會簡單
應該說,目前學校的常規備課活動主要就是一個目的——應付任務。是屬於一種偽備課現象,即使是單元的集體備課,表面上大家議一議、論一論,但最終也是「研教分離」。多數教師都要承擔文本教案的備課要求,備課的效度有多大,老師們心理最明白。但誰都不能迴避現實的課堂教學——因為這是我們的工作,那如何讓我們的備課不失我們教師的「風度」呢?需要我們的課前腹案,需要我們對採取必要的辦法,實際每位老師,都有自己獨道的辦法。有的在教材上做出邊注,有的在一張紙上做出必要的教學流程記錄。那到底要記點什麼啥?
大家知道,數學教學是數學活動的教學,同時也是數學思維訓練的教學。活動的組織,離不開的問題的准備,高質量的問題,是具有思維價值的問題,是會啟迪學生的思維,開啟學生心靈的。問題的序列化呈現,也為教師的教學減輕了機械記憶教學流程的負擔。簡單的說,你只要將要組織的教學活動與緊扣重點的富於啟發與思考的問題設計出來,準保你的教學流程不會出現大的偏差。
例如:今天的這節《數一數——認識新計數單位》
導入:生活引入——組織了一個解說校園信息的活動。
這裡面提出了這樣兩個問題。
問題一:對於我們美麗的校園,你了解多少呢?
問題二:聽我的介紹,你們有什麼新發現嗎?
僅僅兩個問題,從生活情境入手,教師就一下子把學生帶入了認識大數的世界,讓學生體會到數學與生活的密切聯系,數學學習有用!
新課:創設問題情境——設計了一個看課件,數方塊的活動。
問題一:這個正方體是由許多小正方體組成的,到底有多少個小正方體呢?你們能猜一猜嗎?你想怎麼數?(獨立思考與感悟的基礎上,為後續的小組合作學習打下了基礎)
問題二:你們是怎麼數的?(在這里,執教者在設計中,多數採用了限定性的問題,步步引導孩子們的思維,不斷的啟發學生,也是一種問題方式,一個是開放性的問題,一個是限定性的問題。)
問題三:應該也是屬於策略性的問題。——誰還有別的數法?
再次,要組織好一個活動;
數學教學是數學活動的教學,一堂課,也是系列相關活動的集合,比如前面所舉實例:導入、例題呈現,情境創設,重點突出、難點突破,練習處理……那我們最應該組織好的就是「重點內容的突出與難點的突破」活動。
例如:本節課「千重萬難」,如果突出重點,突破難點?李老師在教學中很好的將這一教學的必要片斷呈現給大家。
藉助學生用不同方法數方塊時,加以滲透並突出教學的重點——九十一百是一千。
而對「萬」的理解,孩子們是會感覺很難理解,但通過具體的實踐活動,及策略的教學環節處理——比眼力看誰數的快。再次積累了學生的對大數的理解,數到九個一千的時候,讓學生大膽的嘗試,再添一個大的正方體,是多少?讓學生從中發現10個1000是10000。
在這里不必再細說,只給大家一個建議,活動離不開問題的設計,如果將一系列的問題組織起來,做好預設學生的生成,創設互動的教學過程,相信會精彩不斷。
另外,我們還要力求突出一個亮點;
每一堂課都應該力求有一兩個亮點,實際在每節課,只要你有這個意識,就一定會找到可以生成的亮點,想想哪些內容可以激發學生的思維,啟迪學生的智慧呢?如何能調動學生積極的學,主動的學呢?如何培養學生學習數學的興趣,讓學生對學習對數學產生好感呢?有時在練習環節中也可以實現的。
㈥ 高中生如何理解比特幣加密演算法
加密演算法是數字貨幣的基石,比特幣的公鑰體系採用橢圓曲線演算法來保證交易的安全性。這是因為要攻破橢圓曲線加密就要面對離散對數難題,目前為止還沒有找到在多項式時間內解決的辦法,在演算法所用的空間足夠大的情況下,被認為是安全的。本文不涉及高深的數學理論,希望高中生都能看懂。
密碼學具有久遠的歷史,幾乎人人都可以構造出加解密的方法,比如說簡單地循環移位。古老或簡單的方法需要保密加密演算法和秘鑰。但是從歷史上長期的攻防斗爭來看,基於加密方式的保密並不可靠,同時,長期以來,秘鑰的傳遞也是一個很大的問題,往往面臨秘鑰泄漏或遭遇中間人攻擊的風險。
上世紀70年代,密碼學迎來了突破。Ralph C. Merkle在1974年首先提出非對稱加密的思想,兩年以後,Whitfield Diffie和Whitfield Diffie兩位學者以單向函數和單向暗門函數為基礎提出了具體的思路。隨後,大量的研究和演算法涌現,其中最為著名的就是RSA演算法和一系列的橢圓曲線演算法。
無論哪一種演算法,都是站在前人的肩膀之上,主要以素數為研究對象的數論的發展,群論和有限域理論為基礎。內容加密的秘鑰不再需要傳遞,而是通過運算產生,這樣,即使在不安全的網路中進行通信也是安全的。密文的破解依賴於秘鑰的破解,但秘鑰的破解面臨難題,對於RSA演算法,這個難題是大數因式分解,對於橢圓曲線演算法,這個難題是類離散對數求解。兩者在目前都沒有多項式時間內的解決辦法,也就是說,當位數增多時,難度差不多時指數級上升的。
那麼加解密如何在公私鑰體系中進行的呢?一句話,通過在一個有限域內的運算進行,這是因為加解密都必須是精確的。一個有限域就是一個具有有限個元素的集合。加密就是在把其中一個元素映射到另一個元素,而解密就是再做一次映射。而有限域的構成與素數的性質有關。
前段時間,黎曼猜想(與素數定理關系密切)被熱炒的時候,有一位區塊鏈項目的技術總監說橢圓曲線演算法與素數無關,不受黎曼猜想證明的影響,就完全是瞎說了。可見區塊鏈項目內魚龍混雜,確實需要好好洗洗。
比特幣及多數區塊鏈項目採用的公鑰體系都是橢圓曲線演算法,而非RSA。而介紹橢圓曲線演算法之前,了解一下離散對數問題對其安全性的理解很有幫助。
先來看一下 費馬小定理 :
原根 定義:
設(a, p)=1 (a與p互素),滿足
的最下正整數 l,叫作a模p的階,模p階為(最大值)p-1的整數a叫作模p的原根。
兩個定理:
基於此,我們可以看到,{1, 2, 3, … p-1} 就是一個有限域,而且定義運算 gi (mod p), 落在這個有限域內,同時,當i取0~p-2的不同數時,運算結果不同。這和我們在高中學到的求冪基本上是一樣的,只不過加了一層求模運算而已。
另一點需要說明的是,g的指數可以不限於0~p-2, 其實可以是所有自然數,但是由於
所以,所有的函數值都是在有限域內,而且是連續循環的。
離散對數定義:
設g為模p的原根,(a,p) = 1,
我們稱 i 為a(對於模p的原根g)的指數,表示成:
這里ind 就是 index的前3個字母。
這個定義是不是和log的定義很像?其實這也就是我們高中學到的對數定義的擴展,只不過現在應用到一個有限域上。
但是,這與實數域上的對數計算不同,實數域是一個連續空間,其上的對數計算有公式和規律可循,但往往很難做到精確。我們的加密體系裡需要精確,但是在一個有限域上的運算極為困難,當你知道冪值a和對數底g,求其離散對數值i非常困難。
當選擇的素數P足夠大時,求i在時間上和運算量上變得不可能。因此我們可以說i是不能被計算出來的,也就是說是安全的,不能被破解的。
比特幣的橢圓曲線演算法具體而言採用的是 secp256k1演算法。網上關於橢圓曲線演算法的介紹很多,這里不做詳細闡述,大家只要知道其實它是一個三次曲線(不是一個橢圓函數),定義如下:
那麼這里有參數a, b;取值不同,橢圓曲線也就不同,當然x, y 這里定義在實數域上,在密碼體系裡是行不通的,真正採用的時候,x, y要定義在一個有限域上,都是自然數,而且小於一個素數P。那麼當這個橢圓曲線定義好後,它反應在坐標系中就是一些離散的點,一點也不像曲線。但是,在設定的有限域上,其各種運算是完備的。也就是說,能夠通過加密運算找到對應的點,通過解密運算得到加密前的點。
同時,與前面講到的離散對數問題一樣,我們希望在這個橢圓曲線的離散點陣中找到一個有限的子群,其具有我們前面提到的遍歷和循環性質。而我們的所有計算將使用這個子群。這樣就建立好了我們需要的一個有限域。那麼這里就需要子群的階(一個素數n)和在子群中的基點G(一個坐標,它通過加法運算可以遍歷n階子群)。
根據上面的描述,我們知道橢圓曲線的定義包含一個五元祖(P, a, b, G, n, h);具體的定義和概念如下:
P: 一個大素數,用來定義橢圓曲線的有限域(群)
a, b: 橢圓曲線的參數,定義橢圓曲線函數
G: 循環子群中的基點,運算的基礎
n: 循環子群的階(另一個大素數,< P )
h:子群的相關因子,也即群的階除以子群的階的整數部分。
好了,是時候來看一下比特幣的橢圓曲線演算法是一個怎樣的橢圓曲線了。簡單地說,就是上述參數取以下值的橢圓曲線:
橢圓曲線定義了加法,其定義是兩個點相連,交與圖像的第三點的關於x軸的對稱點為兩個點的和。網上這部分內容已經有很多,這里不就其細節進行闡述。
但細心的同學可能有個疑問,離散對數問題的難題表現在求冪容易,但求其指數非常難,然而,橢圓曲線演算法中,沒有求冪,只有求乘積。這怎麼體現的是離散對數問題呢?
其實,這是一個定義問題,最初橢圓曲線演算法定義的時候把這種運算定義為求和,但是,你只要把這種運算定義為求積,整個體系也是沒有問題的。而且如果定義為求積,你會發現所有的操作形式上和離散對數問題一致,在有限域的選擇的原則上也是一致的。所以,本質上這還是一個離散對數問題。但又不完全是簡單的離散對數問題,實際上比一般的離散對數問題要難,因為這里不是簡單地求數的離散對數,而是在一個自定義的計算上求類似於離散對數的值。這也是為什麼橢圓曲線演算法採用比RSA所需要的(一般2048位)少得多的私鑰位數(256位)就非常安全了。
㈦ 如何用C語言實現RSA演算法
RSA演算法它是第一個既能用於數據加密也能用於數字簽名的演算法。它易於理解和操作,也很流行。演算法的名字以發明者的名字
命名:Ron Rivest, Adi Shamir 和Leonard
Adleman。但RSA的安全性一直未能得到理論上的證明。它經歷了各種攻擊,至今未被完全攻破。
一、RSA演算法 :
首先, 找出三個數, p, q, r,
其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數
p, q, r 這三個數便是 private key
接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)
這個 m 一定存在, 因為 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了
再來, 計算 n = pq
m, n 這兩個數便是 public key
編碼過程是, 若資料為 a, 將其看成是一個大整數, 假設 a < n
如果 a >= n 的話, 就將 a 表成 s 進位 (s <= n, 通常取 s = 2^t),
則每一位數均小於 n, 然後分段編碼
接下來, 計算 b == a^m mod n, (0 <= b < n),
b 就是編碼後的資料
解碼的過程是, 計算 c == b^r mod pq (0 <= c < pq),
於是乎, 解碼完畢 等會會證明 c 和 a 其實是相等的 :)
如果第三者進行竊聽時, 他會得到幾個數: m, n(=pq), b
他如果要解碼的話, 必須想辦法得到 r
所以, 他必須先對 n 作質因數分解
要防止他分解, 最有效的方法是找兩個非常的大質數 p, q,
使第三者作因數分解時發生困難
<定理>
若 p, q 是相異質數, rm == 1 mod (p-1)(q-1),
a 是任意一個正整數, b == a^m mod pq, c == b^r mod pq,
則 c == a mod pq
證明的過程, 會用到費馬小定理, 敘述如下:
m 是任一質數, n 是任一整數, 則 n^m == n mod m
(換另一句話說, 如果 n 和 m 互質, 則 n^(m-1) == 1 mod m)
運用一些基本的群論的知識, 就可以很容易地證出費馬小定理的
<證明>
因為 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整數
因為在 molo 中是 preserve 乘法的
(x == y mod z and u == v mod z => xu == yv mod z),
所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq
1. 如果 a 不是 p 的倍數, 也不是 q 的倍數時,
則 a^(p-1) == 1 mod p (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod p
a^(q-1) == 1 mod q (費馬小定理) => a^(k(p-1)(q-1)) == 1 mod q
所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1
即 a^(k(p-1)(q-1)) == 1 mod pq
=> c == a^(k(p-1)(q-1)+1) == a mod pq
2. 如果 a 是 p 的倍數, 但不是 q 的倍數時,
則 a^(q-1) == 1 mod q (費馬小定理)
=> a^(k(p-1)(q-1)) == 1 mod q
=> c == a^(k(p-1)(q-1)+1) == a mod q
=> q | c - a
因 p | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod p
=> p | c - a
所以, pq | c - a => c == a mod pq
3. 如果 a 是 q 的倍數, 但不是 p 的倍數時, 證明同上
4. 如果 a 同時是 p 和 q 的倍數時,
則 pq | a
=> c == a^(k(p-1)(q-1)+1) == 0 mod pq
=> pq | c - a
=> c == a mod pq
Q.E.D.
這個定理說明 a 經過編碼為 b 再經過解碼為 c 時, a == c mod n (n = pq)
但我們在做編碼解碼時, 限制 0 <= a < n, 0 <= c < n,
所以這就是說 a 等於 c, 所以這個過程確實能做到編碼解碼的功能
二、RSA 的安全性
RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因為沒有證明破解
RSA就一定需要作大數分解。假設存在一種無須分解大數的演算法,那它肯定可以修改成為大數分解演算法。目前, RSA
的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。現在,人們已能分解多個十進制位的大素數。因此,模數n
必須選大一些,因具體適用情況而定。
三、RSA的速度
由於進行的都是大數計算,使得RSA最快的情況也比DES慢上倍,無論是軟體還是硬體實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。
四、RSA的選擇密文攻擊
RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:
( XM )^d = X^d *M^d mod n
前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公
鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用
One-Way HashFunction 對文檔作HASH處理,或同時使用不同的簽名演算法。在中提到了幾種不同類型的攻擊方法。
五、RSA的公共模數攻擊
若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就可得到恢復。設P為信息明文,兩個加密密鑰為e1和e2,公共模數是n,則:
C1 = P^e1 mod n
C2 = P^e2 mod n
密碼分析者知道n、e1、e2、C1和C2,就能得到P。
因為e1和e2互質,故用Euclidean演算法能找到r和s,滿足:
r * e1 + s * e2 = 1
假設r為負數,需再用Euclidean演算法計算C1^(-1),則
( C1^(-1) )^(-r) * C2^s = P mod n
另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數的一對e和d,一是有利於攻擊者分解模數,一是有利於攻擊者計算出其它成對的e』和d』,而無需分解模數。解決辦法只有一個,那就是不要共享模數n。
RSA的小指數攻擊。 有一種提高 RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易於實現,速度有
所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。
RSA演算法是
第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人
們接受,普遍認為是目前最優秀的公鑰方案之一。RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA
的重大缺陷是無法從理論上把握它的保密性能
如何,而且密碼學界多數人士傾向於因子分解不是NPC問題。
RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600
bits
以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。目
前,SET( Secure Electronic Transaction )協議中要求CA採用比特長的密鑰,其他實體使用比特的密鑰。
C語言實現
#include <stdio.h>
int candp(int a,int b,int c)
{ int r=1;
b=b+1;
while(b!=1)
{
r=r*a;
r=r%c;
b--;
}
printf("%d\n",r);
return r;
}
void main()
{
int p,q,e,d,m,n,t,c,r;
char s;
printf("please input the p,q: ");
scanf("%d%d",&p,&q);
n=p*q;
printf("the n is %3d\n",n);
t=(p-1)*(q-1);
printf("the t is %3d\n",t);
printf("please input the e: ");
scanf("%d",&e);
if(e<1||e>t)
{
printf("e is error,please input again: ");
scanf("%d",&e);
}
d=1;
while(((e*d)%t)!=1) d++;
printf("then caculate out that the d is %d\n",d);
printf("the cipher please input 1\n");
printf("the plain please input 2\n");
scanf("%d",&r);
switch(r)
{
case 1: printf("input the m: "); /*輸入要加密的明文數字*/
scanf("%d",&m);
c=candp(m,e,n);
printf("the cipher is %d\n",c);break;
case 2: printf("input the c: "); /*輸入要解密的密文數字*/
scanf("%d",&c);
m=candp(c,d,n);
printf("the cipher is %d\n",m);break;
}
getch();
}