一些關於openssl的使用經驗

因為某些需求,開始了一個禮拜的密碼學基礎之旅。

最簡單的分類就是:

基礎操作與雜湊演算法
對稱式加解密演算法
RSA 非對稱式加解密演算法

在 OpenFoundry 看了了一篇 OpenSSL 的文章,依些指令摘要如下:

openssl version -a 
openssl -h

// 使用 OpenSSL 測試系統效能 
openssl speed 
openssh speed rsa

// 雜湊演算法 
openssl dgst -h 
openssl dgst -sha512 -c testfile

//對稱式加解密演算法 
openssl enc -h

//des3 
openssl des3 -in file -out file.des3 
openssl des3 -d -in file.des3 -out file

//AES-256-CBC  
openssl aes-256-cbc -in file -out file.aes 
openssl aes-256-cbc -d -in file.aes -out file

// RSA 非對稱式加解密演算法 
openssl genrsa -out private.pem 4096 
openssl rsa -in private.pem -out public.pem -outform PEM -pubout 
openssl rsautl -encrypt -inkey public.pem -pubin -in file -out file.rsa 
openssl rsautl -decrypt -inkey private.pem -in file.rsa -out file

以上,都是可以多用的!以外的像是 md5sum, des 比較不建議用了!

md5sum 的話,碰撞複雜度太低,即兩個不同的訊息對應到相同的訊息摘要!

md5sum 碰撞複雜度
2^20 = 1048576

sha0 碰撞複雜度
2^39 = 549755813888

sha1 碰撞複雜度
2^69 = 590295810358705651712

額外碰到好玩的東西,鹽、padding table:

你知道什麼是鹽嘛,在加密過程中有一種名詞叫作 SALT(鹽) ,其實就是在明文前後加上特定的亂碼字串,避免遭到彩虹表等暴力法硬解。

password = password+$salt = passwordWSews : sha512sum(passwordWSews)

另外一種東西叫作 padding table,一般好像實作在 rsa 加密中,和 salt 有一點雷同,有一些參數可選

-ssl            use SSL v2 padding
-raw            use no padding
-pkcs           use PKCS#1 v1.5 padding (default)
-oaep           use PKCS#1 OAEP

同樣是在明文先做前處理再加密的技術,因為是亂碼或是會變異,所以每次的密文都不一樣。

me@host $ echo "a" | openssl rsautl -encrypt -inkey public.pem -pubin|base64
PKL8u34zliMYs47w78xkFX5IGMSKMSpjHCGq0z/fMq4XXPOTNKLb+PkLpW7KS9fwrb51aqzaW9gp
GNSMyTcWd8gLuoy9J2AAR5WVjZZkTuW6T8DgxL7z8B4sk4+uesFW5+mSwof/rT3Gv9YKuJPhLfPB
3iGrcErfykAJo6aOUqQXstyFOfraZ304/taYiVjzJUM9+qasuBULYiVlg0tPl+JGStoeKCsbfC7W
yh6W415qz218w65QsIetIxyHX6mh2TWlFXRBu4GGrG3Ei/PoJhr+Q2ayYKutFwJMf8JIpSHBV/V3
z/pX0SY/J/VKve22ZXsOsE+sS6B+0o/VoR7sn3u5wpC+CNMUnnYci6G9ttQEYCyOjDrOzkBShETJ
k3t2rJ5qsm5wGimqZzuOhcmsFo4ZvjsczKvS10lkiOXy0GoPyThRNLoCSfVmZVNPyZIusWJG0FVT
jdjI7nz0zij0lOqKi1/khvkAds/Eg/1yLthZgJZkCMvTaWF3ANuYvrjSRNJKd0JrJ4k2OsgOtpME
pwqJht7XiAR3U6bKIb1UXIVpSXhFU8qhuL2YDvfxd9kSDwEpA1Ao5AtaeWSYJurOHkXYbnFi/cQp
yU2h3/3nu95sVl/wUWDMIpMvJbqzDAmpykURQpBLryu1277SxMCmzNuQmqTMtkC+4vOvC9wDNDE=

me@host $ echo "a" | openssl rsautl -encrypt -inkey public.pem -pubin|base64
PWO6E1RQGDBYJt2NEiAlLu4yn6oJcj/XJAAHHI3qDelq/ol87Kw5DgzGpv4u/BF4dYA5rphX0JxD
h1WxUGg473wVbhavf7yaCQDTrDe31eN8Qu5nFEJs3YQC9KKrW9VdYs+DXLZ2I3R+5Q/f0F5wae9Q
2mCQoS732SOn21Yexs1vNj0azv1m4pWuvyWSfqPV7GgZ2OtIhTwlEssomYi5/wvMQVoLkZ/Ia3FQ
1ORxOBQdZgp+y1VurNfa2ipeDQisRw3McxECPYnfcwzqPUM2Bnw9ZfDweRLee0IPGSPoBF2z+NJL
YftJOapq8tP7Mp4uLDtxlKRNmMB7ELl8jL2f1D+TzFuW4L8ImEFaPKB/jP6SyQUy1b3L54ElO8zv
ighSwF+X/txWiYFn4zvMY1/bqwbgcddXyvPBM7iTC3zatNUs9akOGm9m7ZFyF/32ZSbYDr1XuM5i
sxvtkctTjdSGiVjFge8p7eas8B9Sb5zSjXMr9PNhGQ4GT94W+q9jnQJFK2SDRk6t7D0Vf0pUzbXE
v6fIOJ7H128wXOrF5kmok92Il9VovwIUAEcYNJTSJXlnZi9hGOdKVK/0un4HM5AfiTmeaYf1Xul+
zlBkgQcxzUk567r7J+HHgAgKrRlk5B6A1m0+wJ46NqtTtkoCy2AQU+oawNXetDfBXQ47Lt5kw+0=

這些東西很深奧,很多數學,我都直接跳過了,只是初淺的想要了解一下而已,意外的讓我對md5sum深信不疑的態度徹底崩壞啦!

Comments