發表文章

密碼編譯概論

轉至: http://msdn.microsoft.com/zh-tw/library/92f9ye3s.aspx 有一種稱為電子密碼書 (Electronic Codebook,ECB) 模式的簡單形式區塊密碼器。ECB 模式並不被視為安全,因為它不會使用初始化向量 (IV) 來初始化第一個純文字區塊。對於已知的私密金鑰  k ,不使用初始化向量的簡單區塊密碼,會將同一個純文字輸入區塊加密成同一個密碼文字輸出區塊。因此,如果您輸入的純文字資料流中有重複的區塊,您的輸出密碼文字資料流中就會有重複的區塊。這些重複的輸出區塊會發出警示,表示弱式加密演算法的未經授權使用者使用了可能已採用的演算法,以及可能的攻擊模式。因此,ECB 加密模式很容易進行分析,並在最後進行金鑰探索。 由基底類別程式庫提供的區塊密碼器類別會使用稱為密碼區塊鏈結 (Cipher-Block Chaining,CBC) 的預設鏈結模式,不過您可以視需要變更此預設值。 CBC 加密會藉由使用初始化向量 (IV) 來加密第一個純文字區塊,解決與 ECB 加密有關的問題。後續的每個純文字區塊都會在其進行加密之前,與前一個密碼文字區塊執行位元排除 OR ( XOR ) 運算。因此,每個密碼文字區塊都會相依於所有的先前區塊。使用這套系統時,就不能使用未授權使用者可能知道的通用訊息頁首來進行金鑰的還原工程。 另一種會洩露利用 CBC 加密所加密之資料的方法,是大規模搜尋每個可能的金鑰。即使是使用最快速的電腦,進行這種搜尋仍非常耗時,而所耗費的時間依照執行加密的金鑰大小而定,因此是不可行的。較大的金鑰大小就較難破解。雖然理論上加密無法完全避免駭客擷取加密資料,但是加密確實會提高駭客進行擷取時所花費的成本。如果花三個月的時間執行大規模的搜尋,只擷取到數天有用的資料,這樣的大規模搜尋是不切實際的。 私密金鑰加密的缺點是,它是假設通訊的兩方已同意某個金鑰和 IV,而且已經相互交換過值。IV 並不被視為機密,因此可以與訊息一起以純文字傳送。不過,這個金鑰必須避免被未經授權的使用者知曉。基於這些問題,私密金鑰加密通常會結合公開金鑰加密,以便隱密傳送金鑰和 IV 的值。

DirectShow for NTSC GraphEdit發生無Video輸出

之前在GraphEdit拉出的架構可以直接使用NTSC的Device播放, 但這幾天我重新嘗試用程式把架構再拉出來,結果發生無Video輸出, 而且解析度不太正常,並圖像也只有同一張,剛開始一直找不到原因, 後來嘗試幾個架構方式後,一直到最後才發現原來Renderer的解析度 跟Video Capture Sources不一樣,於是重新設定解析度之後就可以 正常輸出了。

ISDB紀錄/說明

因工作需要,在新工作上我們必須做一些與ISDB相關的Driver/軟體, 因為之前我並未碰過ISDB,因此為它做了一些研究,順便紀錄下來: ISDB目前有分為兩種模式,一種是地上波(ISDB-T),另一種是衛星訊號(ISDB-S)。 而ISDB的頻寬一律落在6Mhz的。 目前使用ISDB規格的國家有:巴西、日本。 http://www.arib.or.jp/english/  : ISDB在日本的規範組織。

利用jiffies計時

因工作上的需求,於是我又找了另一個計時的方法, 但經過測試後,偶爾會出現不是很準確的狀況, 但仍紀錄下來當作參考。 ------------------------------------------- jiffies - 最原始的來源是CPU的tick。當硬體一過電後, CPU每隔一段固定時間就會發出一個tick訊息,而由jiffies紀錄下來, 因此,你可以利用程式讀出jiffies的值,那就是開機到目前為止的ticks。 而CPU隔多久會發出一次tick的訊息,就得視CPU的clock速度而定, 可以由make menuconfig中找到clock freq. 的設定,裡面有提到當時的速度設定。 而jiffies的使用例子如下: long tick2,tick1; tick1 = jiffies; for(;;)   do something ....   break; tick2 = jiffies; time= tick2-tick1; long msec = jiffies_to_msecs(abs(time)); msec求出的值便是毫秒的單位啦!

[BusyBox的用途]

這陣子要在FPGA的開發板上做一些系統的測試,所以順便研究了BusyBox。 關於busybox的說明只有簡單一句話: 他就是Linux上的工具包,集合指令、工具,如:ls,mkdir,move ...等。 當然對我們來說,這只是將工具的Size壓縮, 當你成功的compiler busybox後,他會幫你建立一個rootfs。 而rootfs會自動copy一些工具到/bin,/sbin,usr/bin ...等。 裡面可以清楚看到一些執行指令都是個link檔,與busybox連結。 所以Busybox在compiler時,就依cross compiler的環境將這些工具/指令compiler進busybox的binary檔了。 所以,有了Busybox就可以省去我們建立這些指令的時間跟硬碟的空間,當然這也是嵌入式系統的第一步。

[Linux上clock_gettime毫秒的計算]

整理一下在Linux上的時間計算方式,據原先常用的gettimeofday(tv,NULL);的方法 好像沒辦法精確的抓到毫秒,所以我再google了另一個方法...紀錄下來: #include<stdio.h> #include<time.h> #define BILLION 1000000000L; int main(void){ struct timespec start,end; clock_gettime(CLOCK_REALTIME,&start);//取得Start的時間 int ret; printf("In sleep ...\n"); usleep(150000); printf("out of sleep ... \n"); clock_gettime(CLOCK_REALTIME,&end);//取得End的時間 double time = ( end.tv_sec - start.tv_sec)                             + (double)(end.tv_nsec-start.tv_nsec)/(double)BILLION;//計算開始到結束花費的時間 printf("run time = %lf\n",time);         //顯示出來的時間會是" 秒.微秒毫秒..." } 記得在Compiler後面加上-lrt,否則會在Link時出現找不到clock_gettime的錯誤訊息喔!