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就架好了喔~~

2014年12月21日 星期日

2014 Microsoft Azure 開發訓練營 回顧

簡單的回顧一下「2014 Microsoft Azure 開發訓練營」這所學到的東西。

其實主要就是 Microsoft Azure 這套服務!!!

Microsoft Azure的官網:http://azure.microsoft.com/zh-tw/
Microsoft Azure的學習文件:link(有中文的文件喔!!)
Microsoft Azure的定價:link
(有點像是水電的概念,用多少算多少,唯一不一樣的是,只會降價,不會漲價)

而在這天的課程中主要是學習三個重點(上午場純介紹)
網站應用程式行動應用程式虛擬機器(附加Azure Pass 開通


網站應用程式:
就是你可以將網站的資料放置在Microsoft Azure的Server上,並且支援多種語言.NET、PHP、JAVA、PYTHON等去撰寫。也支援多種的同步方式,Visual Studio、FTP、Git、Dropbox等。像我就是用dropbox在同步資料上去的。
如果是連接資料庫的網站,那Microsoft Azure也有提拱MSSQL、MySQL、Oracle等多種資料庫。





行動應用程式
他可以讓你的行動裝置將一些數據存在雲端這塊,並且支援不同的身份登入(Google+、Facebook、Mizrosoft、Twitter等),而行動裝置則是支援Android、iOS、Windows,後端則是可以使用,NET、JavaScript。我個人是覺得有比Google App Engine簡單好用xD



虛擬機器
他提供一個VM的環境給你,在上面的所有東西自已來,主要特色是你可以選擇要把VM架在哪一個國家的Data Center、還有提供多元的VM環境可以選擇。



上面都只有簡單的提到概念而已,實際要動手去試試會比較有感覺。登入後會有試用期和試用金(看哪一個先用完)





然後,還有一個東西叫MVA(Microsoft Virtual Academy),他不是一種技術,而是一個學習平臺,在這邊可以免費的學習到很多微軟的技術。
http://www.microsoftvirtualacademy.com/



至於什麼是「人類女孩養成計劃」呢?
http://agirl.azurewebsites.net/index.htm

他真的是一個再單純不過的一個學習遊戲了~~
主要目的就是讓使用者可以去學習Microsoft Azure上的所有東西就是了xD




當然她還是有些地方是真的養成遊戲,哈哈
http://agirl.azurewebsites.net/informatation.html



馬上來去玩玩吧→→Microsoft Azure

2014年11月26日 星期三

[考試筆記] 查詢Linux的版本

想到上次考網管的時候被問到如何查自己的Linux版本,結果小弟不才答不出來,回家後趕緊來查一下xD

其實就下面兩個指令而已~
(至於差別的話,輸進Terminal就知道啦!!)

$ uname -a


$ lsb_release -a



2014年11月20日 星期四

Ubuntu 上安裝嘸蝦米(boshiamy)輸入法

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

開啟Terminal,使用以下指令
sudo apt-get install fcitx
sudo apt-get install im-config
//此項用14.04的不須安裝,因為已是為預設
sudo add-apt-repository ppa:fcitx-team/nightly
sudo apt-get update

嘸蝦米套件
sudo apt-get install fcitx-table-boshiamy

新酷音
sudo apt-get install fcitx-chewing

額外的套件
sudo apt-get install fcitx-m17n

sudo apt-get remove ibus
//14.04的不要執行這行
im-config


之後會看到設定的視窗,依照下面去設定~






















重新開機或再次登入後就可以看到了~
Ctrl + Space 可以開啟輸入法
Ctrl + Shift 可以切換輸入法






2014年11月17日 星期一

[考試筆記] WWW網路伺服器架設

前陣子參加學校辦的「網路伺服器系統管理檢定」,主要的考試重點如下:

學科:
(考古題寫一寫就好,重點在術科)
https://wwwmail.ccu.edu.tw/preExam.php

術科:
1.安裝作業系統
2.架伺服器的服務
3.資安防護
4.系統更新
5.變更資料庫和系統密碼
6.資料庫備份

下面把上面六點會用到的指令整理出來:

筆者所使用的作業系統環境為:Ubuntu 12.04.5 LTS

1.安裝作業系統
略,這個我想就不用多說了......

2.架伺服器的服務

0 - UPDATE
sudo apt-get update 

1 - SSH
sudo apt-get install ssh
/etc/init.d/sshd restart
netstat -tlnp | grep ssh

2 - Apache2
sudo apt-get install apache2 

3 - PHP5
sudo apt-get install php5 libapache2-mod-php5 

4 - MySQL Server
sudo apt-get install mysql-server 

5 - phpMyAdmin
sudo apt-get install phpmyadmin 

sudo gedit /etc/apache2/apache2.conf 
加入下列設定文字
# Enable PHPMyAdmin
Include /etc/phpmyadmin/apache.conf 

sudo /etc/init.d/apache2 restart 


3.資安防護
查看iptable
sudo iptables -L 

1.啟用和停用防火牆
sudo ufw enable
sudo ufw disable 

2.允許和關閉連入
sudo ufw default allowip
sudo ufw default deny 

3. 新增防火牆規則
sudo ufw allow ssh
 (使用服務名稱來允許連入,服務名稱請參考 /etc/services 檔案)
sudo ufw allow  in 8080   
(使用 Port 號來允許連入 )
sudo ufw deny out 4662  
( 使用 Port 號來拒絕連出到別台電腦的指定 Port 號 )
sudo ufw deny in 4662/udp 
(使用 Port 號來拒絕接受指定 Port 號的 UDP 連入要求 )

4. 刪除規則防火牆規則
sudo ufw status numbered
查看防火牆規則號碼
sudo ufw delete 規則號碼 

5. 啟用日誌記錄
sudo ufw logging on
查看log記錄
/var/log/ufw.log 

6. 檢視規則和狀態
sudo ufw status

sudo ufw status verbose 

參考:link

4.系統更新
sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get clean
參考:link

5.變更資料庫和系統密碼
1.Stop the MySQL Server.
sudo /etc/init.d/mysql stop 

2.Start the mysqld configuration.
sudo mysqld --skip-grant-tables & 

3.Login to MySQL as root.
mysql -u root mysql 

4.Replace YOURNEWPASSWORD with your new password!
UPDATE user SET Password=PASSWORD('YOURNEWPASSWORD') WHERE User='root'; FLUSH PRIVILEGES; exit; 


mysql開啟
sudo /etc/init.d/mysql start
mysql關閉
sudo /etc/init.d/mysql stop 

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

passwd [account] 
(更新linux使用者密碼)

6.資料庫備份
其實主要是用tar和dump來備份「www」和「mysql」這兩個資料夾




2014年10月27日 星期一

VirtualBox 共用資料夾掛載

首先要在VirtualBox中插入Guest Additions CD映像,安裝完成後,要重開機才行。



設定「共用資料夾」


















增加要共用的資料夾












選取資料夾













































將它設定自動掛載

























回到Linux的terminal,下指令:
sudo mount -t vboxsf [來源的資料夾] [要掛載到哪]

範例這是,要將sharebox這個資料夾掛載到home目錄下的mshare資料夾
ps.mshare資料夾一定要事先存在才可。
sudo mount -t vboxsf sharebox ~/mshare


















最後可以用「ls」這個指令看看,是否有掛載成功。有綠色反白的就是有掛載的意思。

[Linux筆記] type、alias

查詢某指令是否為內建的指令

$type 指令

如果不是,則print出它的alias~

自定義alias方法

$alias 名稱='指令'

例如:輸入cdtest可以直接跳到/home/test/的資料夾
$alias cdtest='cd ~/test/'


2014年10月26日 星期日

[課程筆記] Linux Bro 安裝&使用

Bro 是一套強大的網路分析套件。


The Bro Network Security Monitor
https://www.bro.org/

使用OS的版本:Ubuntu 12.04 LTS 64bit

基本上安裝是用官方的安裝文件去將Bro裝起來的~

參考:https://www.bro.org/sphinx/install/install.html#id1


基本套件安裝
Note:一定要確定每個套件都裝成功,只要某一個失敗,那套件之後都會沒有安裝






最笨的安裝方法:(一個一個裝)
$sudo apt-get install 套件名稱


從網路上取得Bro套件



如果發現沒有git指令,請用下列指令安裝:
$sudo apt-get install git

之後我們用cd這指令轉到bro目錄下,並開始安裝




繼續...make(要很久的~~~)




再來...(官方文件中沒有加sudo,只是後來發現要加sudo才能用)


設定環境變數



通常我們要分析一個pcap檔、dump檔、trace檔之類的,會需要先用Bro去解析出log檔
所以解開吧(這邊是將dump檔放在/home/test1026/的資料夾下)
(分析過程中,會感覺沒動作,但等等吧!!)


等好了之後,在bro的目錄中,可以看到多了一些log檔(不是一些......是很多)
相關log說明,請見官網說明(link)
































後續的分析會使用到awk這個資料處理工具

簡單的二個範例如下
1.從conn.log中讀取,如果NR(現在處理行數)大於第8行,則x++,最後印出x
awk '{if(NR>8) x++} END {print x}' conn.log

2.從http.log中讀取,如果第六個欄位的資料等於80,則印出第五欄
awk '{if($6=="80") print $5}' http.log



P.S.有些人會覺得奇怪,重開機後,Bro怎麼就不能用了,但Bro資料夾卻還在?
把PATH再設一次就可以了~