One Time Password

One Time Password稱為一次性密碼, 也就是說你的密碼不需要記住. 以一個裝置來製造密碼, 而這密碼只能使用一次. 如此一來可以防止replay attack. 防止別人從中間劫取你的訊息然後送給伺服器. 但伺服器如何得知到底是誰送來的密碼? 如何辨識? client和server間如何同步?
 
有幾種方式
 
1. offline counter
 
client題供一個F function
 
F(counter)=OTP
 
OTP就是One Time Password
 
其中F每個Client都不一樣.
 
Server提供一個 對應G Function
 
G(OTP)=counter
 
因為counter會累計, 可由counter推算是不是replay的message

 
2. offline timer
 
client題供一個F function
 
F(timer)=OTP
 
OTP就是One Time Password
 
其中F每個Client都不一樣. 
 
Server提供一個 G Function
 
G(OTP)=timer
 
當timer推算是不是replay的message
 
以上兩種方式的問題在於timer和counter必需要有一些容錯的計算.
但是可以off line方式產生OTP
 
 
3. online key exchange
 
K是使用者的密碼
 
Server提供一個Function F
 
F(K)=OTP
 
但OTP無法推回K
 
伺服器另外提供一個驗證的Function V
 
if OTP is true then V(OTP)=true
else OTP is false then V(OTP)=false
 
無論OTP是正確或是錯誤, 經過V Function後, OTP就消失了.
 
下次無法再使用相同的OTP作replay attack.
 
這種方式可以將密碼轉換成為一組OTP. 這種方式可以用於
 
一些認證轉移的機制上. 且OTP間不需要容錯.
 

網路ATM的弱點

現有晶片金融卡, 在網路ATM進行轉帳, 實際上存在著一些嚴重的弱點. 網路ATM都是採取Chellenge-Response的模式, 也就是由電腦送一組Chellenge, 晶片卡經過3DES運算, 然後Response一組Cipher, 依FISC II的規格使用得是秘密金鑰的認證, 你的晶片卡上的秘鑰, 銀行也留有一份, 所以ATM的伺服器也作了相同的運算,  比對Cipher是不是一樣. 讀卡機基本上是連在電腦上面的, 大多數人會把它連接在上面忘了拔下來. 這時候如果Cracker已經取得你電腦的控制權, 他可以利用你插在讀卡機上面的晶片卡作運算而得到Cipher. 此時保護你的銀行的錢, 只剩下你所知道的PIN code了. 目前市面上所有的網頁輸入方式, 不管是螢幕鍵盤, 或是滑鼠隨機點按, 對Cracker來說, 那只是多少時間的問題. 控制了你的電腦, 一樣可以控制你的IE Brower, 在IE還沒將PIN code 轉換成為SSL加密送出前, 透過COM的存取就可以直接取走PIN code了. Anyway, 我寧願多走一些路到銀行的ATM, 至少他是封閉系統, Microsoft Windows的安全性, 我一向是不敢恭維.

如何將pvk轉換成為p12

pvk和spc可以用來簽署, ActiveX原件, 但.jar只能用p12來簽署
但是一張class 3 digital ID憑證一年的驗證費用高達4~500元美金
, 可以說相當昂貴. 功能因為檔案格式問題被限制住似乎有點欠妥.
其實還是有辦法可以轉換.
 
首先要準備下列工具
1. Windows 2000 Server
2. Mozilla
3. pvkimport
 
先到Microsoft下載pvkimport然後, 解開安裝.
 
1. pvkimprt mycredentials.spc myprivatekey.pvk
可以將憑證置入certstore.
2. 然後在IE的憑證存放區匯出, 選擇匯出金鑰及PKCS#12(.pfx)
選則使用憑證路逕所有憑證, 不要選加強型保護.
3. 打開mozilla選擇管理憑證, 然後匯出PKCS#12(.p12)
4. 用UltraEdit找出憑證的key
 
大功告成.
jarsigner -storetype "pkcs12" -keystore my.p12  myapp.jar key
可以簽署了.
 
 

如何在手機上寫Java程式

J2ME Wireless Tool Kit, 是一個很好整合介面. 但良好的Java編輯器還是Sun One Studio(以前叫forte for Java)最好用了. 寫好了程式直接可以模擬, 模擬完了就透過傳輸丟到手機上面跑了. 可以用藍芽, IR,或是特製的專用傳輸線. 我現在用Nokia 5140, 買了一條Ca-42傳輸線, 不貴Yahoo上面195直接寄過來.
手機上的運算能力不差, 跑個DES加密只是瞬間, 真是快.

PKCS#11

-PKCS#11是RSA Security訂出來的 Cryptographic Token Interface Standard, 這組API可以跨平台使用, 它定義了C語言.h介面, 開發token的廠商只要提供一個.DLL或是.SO的動態連結檔, 其它就是統一標準介面了.基本上目前PKI的私鑰容器, Smart Card, Token多數都是與這規格相符, 甚至許多HSM也提供介面的.
 
 
這網址提供了PKCS#11的Implement.
 
如果要參考PKCS#11的使用範例:
 
Mozilla Project的PKCS#11 warp是很好的範例
 
Source 目錄在 mozillasecuritynsslibpk11wrap