2020年6月16日 星期二

[Crypto] 亂度檢測 NIST SP 800-22

目的:檢測指定來源所產出的亂數值是否夠亂
工具:NIST SP 800-22
介紹:https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software

安裝環境:
# 下載工具
$ wget https://csrc.nist.gov/CSRC/media/Projects/Random-Bit-Generation/documents/sts-2_1_2.zip
# 解壓縮
$ unzip sts-2_1_2.zip
# 進入資料夾並編譯
$ cd sts-2.1.2/
$ make
#最後會在資料夾中看到assess這支工具




亂數產生:
# 利用linux內建的亂數產生器
$ dd count=32 ibs=1048576 if=/dev/urandom > test.bin
# 用hexdump檢示產出的亂數
$ hexdump -n 128 test.bin




工具使用:
$ ./assess 512000
#這邊的512000是指一個序列有多少bit
512000 bits = 64000 Bytes = 62.5 KB




其中有一行「How many bitstream?」,計算方法如下:
計算有多少塊的資料要檢測,以下計算完後的524.288,請不要四捨五入,請直接括去,因為進位後會造成最後一個資料塊資料不足而有錯誤

先在linux下查看檔案大小,如:test.bin,(33554432 / 512000) * 8 = 524.288(取整數524就好)



結果分析:
$ vim experiments/AlgorithmTesting/finalAnalysisReport.txt


從圖中的結果來看,各測項的P-VALUE皆超過0.05,因此可認定該測項的假設成立(序列是隨

機的)。如果該測項沒有通過,則會在該測項前面會有個*,表示該項未通過。



原理:
依照NIST的檢測方法,其實就是針各個測項進行統計學的P-value,文言的來說就是「是否顯著」,白話的說「是否接受假設」

H0:假設該序列是隨機的,反之,Hα:序列不是隨機的
α則為顯著水準,通常取值為0.1、0.05、0.01為標準

若P >= α,則接受假設(H0:假設該序列是隨機的)

參考:
1. http://biostat.tmu.edu.tw/oldFile/enews/ep_download/21stat.pdf
2. http://www.math.nsysu.edu.tw/~lomn/homepage/R/R_testing.htm


其中挑幾個比較重要的測試(必過)項目來說:
1. Frequency (Monobit) Test:整個序列中的0和1的比例是否趨近於各半,0和1的數量大致相同
2. Frequency Test within a Block:整個序列切成多個塊,對各塊檢測是否0和1的比例是否趨近於各半
3. Runs Test:用於檢測連續的1和連續0的長度,主要針對0和1的振盪是否太快或太慢
4. Test for the Longest Run of Ones in a Block :整個序列切成多個塊,對各塊檢測最長的連續的1(或0)是否符合預期
5. Binary Matrix Rank Test:二元矩陣測試
6. Discrete Fourier Transform (Spectral) Test:離散傅立葉轉換測式
7. Cumulative Sums (Cusum) Test 累積和測試








2020年6月15日 星期一

[更新]TQC+ 物件導向程式語言 Java 6 解題解題秘笈(含勘誤)

這篇勘誤主要是針對TQC+釋出的修正並重新編排此篇「TQC+ 物件導向程式語言 Java 6 解題秘笈(最近終於有點閒了?!)



詳細的勘誤內容請參考 LINK

本次更新時間為2020/06/15,皆重新檢示程式碼並確保可完成編譯,若有錯誤的地方,歡迎留言告知,謝謝!!

此外也將程式碼上傳至github供大家參考
Github 備份:LINK

本篇教學的程式碼皆由筆者編輯,歡迎轉貼本教學,但請全文轉貼,謝啦~

2020年6月8日 星期一

[更新]TQC+ 程式語言 C 解題解題秘笈(含勘誤)

這篇勘誤主要是針對TQC+釋出的修正並重新編排此篇「TQC+ 程式語言 C 解題解題秘笈(最近終於有點閒了?!)



詳細的勘誤內容請參考 LINK

本次更新時間為2020/06/08,皆重新檢示程式碼並確保可完成編譯,若有錯誤的地方,歡迎來信告知,謝謝!!

此外也將程式碼上傳至github供大家參考
Github 備份:LINK

本篇教學的程式碼皆由筆者編輯,歡迎轉貼本教學,但請全文轉貼,謝啦~

2015年10月15日 星期四

LXR 安裝教學

本教學的OS使用:ubuntu 14.04 64bit(但通常沒有差別)

首先需要的軟體:
LXR 0.3Glimpse、Apache

Apache安裝:
這部份網路上已有很多的教學文了,主要的是要開啟CGI的功能
sudo a2enmod cgi
sudo service apache2 restart
安裝完後,把網頁的資料放在這個底下便可瀏覽
/var/www/html/(網頁or資料)

可以先把他放在自已方便的地方,這邊就先放在家目錄下的/teach資料夾
並且將它解壓縮:
tar xf glimpse-latest.tar.gz
tar xf lxr-0.3.1.tar.gz










安裝glimpse:
cd glimpse-4.18.6/
./configure
sudo make
sudo make install



安裝LXR:

先進入/lxr-0.3
cd lxr-0.3

檢查perl的版本和路徑
vim Makefile










修改安裝路徑
一定要在/var/www/html/底下











之後開始安裝
make
sudo make install
之後就可以看到/var/www/html/底下會看到lxr2,那就安裝完了~






修改apache2的設定:
cd /etc/apache2
sudo vim apache2.conf

在apache2.conf文件中合適式的地方加入下列的設定文字
<Directory /var/www/html/lxr2/http>
    Options All
    AllowOverride All
    order allow,deny
    allow from all
</Directory>
上方紅字的部份為你安裝LXR的地方






















重啟Apache
sudo service apache2 restart

之後開始來設定LXR的設定檔
cd /var/www/html/lxr2/http
sudo vim lxr.conf
這邊會有些不好懂,但我會盡力......的說明
在這個設定檔主要會看到的是下面的文字
variable: v, Version, [/local/lxr/source/versions], [/local/lxr/source/defversion]
在這裡的variable有點像是datatype的在宣告一個變數v
Version則是顯示在網頁上
後面的兩個中括號,前面那個像是list的概念
前面那個則是在list中,哪個為預設值
這裡寫成/local/lxr/source/versions的路徑,是指要去這個路徑下讀versions這個檔案中的清單
variable: a, Architecture, (i386, alpha, m68k, mips, ppc, sparc, sparc64)
而使用小括號則是括號中為list,其中第一個為預設值
baseurl: http://lxr/
這個是你網路的入口
htmlhead: /local/lxr/http/template-head
htmltail: /local/lxr/http/template-tail
htmldir:  /local/lxr/http/template-dir
然後網站的html語法的的template
sourceroot: /local/lxr/source/$v/linux/
srcrootname: Linux
原始碼的位置
incprefix: /include
dbdir: /local/lxr/source/$v/
原始碼資料庫的位置,因為可能不只放一個版本而已
glimpsebin: /local/bin/glimpse
(是不是看不懂......沒關系,和我做一次吧~)

//首先這行
variable: v, Version, [/local/lxr/source/versions], [/local/lxr/source/defversion]
//改成這樣,讓可以讀到versions這個檔案
variable: v, Version, [/var/www/html/lxr2/source/versions], [/var/www/html/lxr2/source/defversion]
//這三行
htmlhead: /local/lxr/http/template-head
htmltail: /local/lxr/http/template-tail
htmldir:  /local/lxr/http/template-dir
//改成這樣
htmlhead: /var/www/html/lxr2/http/template-head
htmltail: /var/www/html/lxr2/http/template-tail
htmldir:  /var/www/html/lxr2/http/template-dir
(是不是有感覺了...)
//這行
sourceroot: /local/lxr/source/$v/linux/
//改成
sourceroot: /var/www/html/lxr2/source/$v/linux/
//其中這邊的$v就是上面有宣告的變數v,好讓使用者可以選擇版本
//這行
dbdir: /local/lxr/source/$v/
//改成
dbdir: /var/www/html/lxr2/source/$v/
//這行
glimpsebin: /local/bin/glimpse
//改成
glimpsebin: /usr/share/bin/glimpse
之後可以先將lxr.conf儲存了~
那開始來解析原始碼吧~
那我們的source都是放在/var/www/html/lxr/source/
cd /var/www/html/lxr/source/
這邊我們下載三個版本做為範例:linux-2.6.32、linux-3.4.109、linux-4.1.10
那要先把各別版本的資料夾創出來
sudo mkdir linux-2.6.32
sudo mkdir linux-3.4.109
sudo mkdir linux-4.1.10
之後進去任一個版本
cd linux-2.6.32
下載Linux kernel
sudo wget https://cdn.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.68.tar.xz
sudo tar xf linux-2.6.32.68.tar.xz
//改名sudo mv linux-2.6.32.68 linux

改名為linux的原因為lxr.conf預設為linux,也可以改名稱,但要與設定檔對得上











接下來我們要來解析原始碼先進到這個目錄
cd /var/www/html/lxr2/source/linux-2.6.32
把genxref設定為可執行檔
sudo chmod a+x ../../bin/genxref
解析原始碼
sudo ../../bin/genxref linux
跑完之後可以在資料夾下看到這兩個檔案fileidx、 xref





把fileidx的權限更改一下
sudo chmod 755 fileidx
(這個要等一些時間......然後其他版本也是這麼做~)
那剛剛有提及要去versions這個檔案讀list,那現在就來製做
剛剛是放在/source底下所以先去那
cd /var/www/html/lxr2/source/
sudo vim versions
輸入下列三行 linux-2.6.32 linux-3.4.109 linux-4.1.10 再來設定預設的值
sudo vim defversion
輸入下列一行
linux-2.6.32
設定Apache的存取權限:
在/var/www/html/lxr2/http/下面加入一個.htaccess的檔案
cd /var/www/html/lxr2/http/
sudo vim .htaccess
加入下最內容
<Files ~ (search|source|ident|diff|find)>     SetHandler cgi-script     Options ExecCGI </Files>

設定LXR的額外功能:

cd /var/www/html/lxr2/source/linux-2.6.32/
sudo glimpseindex -H . .

當出現Size of files being indexed = xxx B, Total #of files = xxx,就可以按ctrl+C
xxx為一組數字
之後會在資料夾下看到一些隱藏檔
.glimpse_index、.glimpse_messages、.glimpse_statistics、.glimpse_tmpi2















更改權限
sudo chmod 755 .glimpse_*
各版本的資料夾都要做一次

之後就可以進去看到了Linux Cross Reference
http://(Your IP)/lxr2/http/source

此外,如果有要調樣版的話,可以在/var/www/html/lxr2/http/底下會有三個template的檔案,裡面是可以調html樣版的。













可以參考我做的設定檔:link

2015年5月5日 星期二

Markdown 格式

前陣子在學習Git和Github的技能,發現有個東西頗好用的說,就是「Markdown」

他是一種「易讀易寫」的文件格式。

這邊有個簡單的影片可以了解Markdown是什麼:



然後,以下有兩個還蠻好的學習網站可以學習:

markdown.tw上的教學
https://github.com/othree/markdown-syntax-zhtw

OpenFoundry上的教學
https://www.openfoundry.org/tw/resourcecatalog/Program-Development/Markup-Languages/markdown

Chrome上也有套件可以檢示這種.md的格式
Markdown Preview
https://chrome.google.com/webstore/detail/markdown-preview/jmchmkecamhbiokiopfpnfgbidieafmd


以下是我簡單寫的範例:

#標題(階段1)

文字

##標題(階段2)

文字

###標題(階段3)

文字

####標題(階段4)

文字

#####標題(階段5)

文字

######標題(階段6)

文字

*斜體*

**粗體**

沒有順序的清單

- house 
- key
- fan

有順序的清單

1. 一年級
2. 二年級
3. 三年級

超連結(有註解)

[連結](http://www.ccu.edu.tw "中正大學")

超連結(沒註解)

[連結](http://www.ccu.edu.tw)

劃一條線

*************************

再一條

-----------------------------------------

block 框框

> 文字在框框

> 文字在框框

> 文字在框框

> 文字在框框

> 文字在框框

> 文字在框框

 
最後會呈現成這樣子



2015年1月24日 星期六

[Linux筆記] adduser、sudo


新增使用者
adduser username 

預設的家目錄是/home/username

如果要將這位user加入sudoer中

方法一
可以去/etc/sudoers中編輯
sudo visudo






在文件最後加入這行
range2 ALL=(ALL) ALL
(這邊以username為range2為範例)

最後可以查看一下是否有加入
sudo less /etc/sudoers



方法二
查看/etc/sudoers內的有sudo權限的群組名稱














之後再打入下列指令
sudo adduser username sudo
ps.使用者名稱要先建立才可加入群組中~

ubuntu 架VPN Server

本教學使用OS環境為:Ubuntu 14.04.01 64-bits LTS

開啟Terminal,並且確認你的帳號有sudo的權限。

1.安裝PPTPD套件

sudo apt-get install -y pptpd
2.設定 pptpd.conf文件


sudo vim /etc/pptpd.conf




















要把下列四行的註解#拿掉:(把前面的#刪掉)

#logwtmp 
......
#connections 100 
......
#localip 140.123.102.xxx 
#remoteip 192.168.3.1-220,192.168.4.1-220

這邊比較要注意的是localip是指你那台電腦的IP
remoteip則是要配發給客戶端的的IP

3.設定DNS

sudo vim /etc/ppp/pptpd-options








(由於筆者是在學網架的,所以DNS就是填學網的DNS)
如果你的ISP服務商有提拱DNS可以使用他們提供的DNS,沒有的話,可以直接使用Google的DNS

ms-dns 8.8.8.8 
ms-dns 8.8.4.4

4.設定使用者帳號密碼
sudo vim /etc/ppp/chap-secrets










這邊主要有四個欄位:
第一欄:帳號
第二欄:伺服器,直接填「pptpd」就可以了
第三欄:密碼
第四欄:配發IP,如果沒有特別限制的話,可以直接打上「*」,或像上圖最後一欄打上特定IP 

5.最後重啟VPN service

sudo /etc/init.d/pptpd restart








6.新增防火牆規則

sudo iptables -t nat -A POSTROUTING -s 192.168.3.1/24 -o eth0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.4.1/24 -o eth0 -j MASQUERADE

紅色的部份看你是配給你的客戶端多少的IP address來設定

7.設定轉送封包
sudo vim /etc/sysctl.conf







把這行 net.ipv4.ip_forward=1 註解#拿掉

將sysctl.conf讀入
sudo sysctl -p
這樣VPN Server就架好了喔~~