1,678 瀏覽數

BitCoin – SHA256

我要怎麼估算自己機台的算力(Hash Rate)?

Bitcoin 主要使用 SHA256 為演算法.它單向雜湊函數 (one-way hash function)的一種.

什麼是 單向雜湊函數 (one-way hash function)?
One Way Hashes 主要會產生一組固定長度字串 (fingerprint or message digests),這組字串用來比對原資料是否遭到修改,它的特性如下

  1. 原資料輸入長度為可變
  2. 輸出的 fingerprint 為固定長度
  3. 當資料任何 byte 改變時, fingerprint 也會變的完全不同
  4. 我們無法依據 fingerprint 來回推成原資料,這也是為什麼稱為 One Way hash(單方向的資料運算,函數多對一的特性)

既然無法回推成原資料,那怎知資料是否正確, One Way hash 會再將資料再做一次 One Way hash 然後直接比對 fingerprint 是否一樣. md2, md5, mdc2, rmd160, sha1, sha256, sha512, haval, crc-32 皆是採用 One Way hash

SHA-256 可以輸入的 最大訊息長度(位元bit) 為2 64-1, 輸出的摘要長度(位元組 byte) 為 32 ,也就是說不管資料量有多大,固定輸出就是 32 bytes.

在 Linux 系統下有什麼工具可以來估算你的 SHA256 的速度?可以使用 openssl speed sha256

測試環境為 Ubuntu 16.04 x86_64

openssl speed sha256

透過 SSL 作 sha256 hash,是計算該系統的 sha256 hash 會有多快.

root@ubuntu:~# openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 8744167 sha256's in 3.02s
Doing sha256 for 3s on 64 size blocks: 4731745 sha256's in 3.01s
Doing sha256 for 3s on 256 size blocks: 2298368 sha256's in 3.01s
Doing sha256 for 3s on 1024 size blocks: 713351 sha256's in 3.02s
Doing sha256 for 3s on 8192 size blocks: 95872 sha256's in 3.01s
OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx) 
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
sha256           46326.71k   100608.53k   195475.82k   241877.95k   260924.73k

前面五行是測試(16 , 64 , 256 , 1024 , 8192 byte)經過
Doing sha256 for 3s on 16 size blocks: 8744167 sha256’s in 3.02s
第一行執行 sha256 做 one-way hash 處理了 8744167 個 16byte 的資料,需要 3.02 秒.
最後面是結果總整理, 數字說明每秒可以處理的 bytes 數 (單位是 K (1000))

前面 16 byte * 8744167 個區塊 / 3.02 秒,後面算出一次處理 區塊大小為 16byte 的資料透過 SSL SHA256 可以處理 46326.71kbyte (k=1000) 的資料量.

實際用 sha256 做 hash 可以透過下面兩個指令.

openssl dgst -sha256

root@ubuntu:~# openssl dgst -sha256 /etc/passwd
SHA256(/etc/passwd)= 543fff87547d3afa2ae509ec7fa91be011777e4b4b9bfe98a7d1995e65903e99
root@ubuntu:~# openssl dgst -sha256 -c /etc/passwd
SHA256(/etc/passwd)= 54:3f:ff:87:54:7d:3a:fa:2a:e5:09:ec:7f:a9:1b:e0:11:77:7e:4b:4b:9b:fe:98:a7:d1:99:5e:65:90:3e:99

sha256sum

root@ubuntu:~# sha256sum /etc/passwd
543fff87547d3afa2ae509ec7fa91be011777e4b4b9bfe98a7d1995e65903e99  /etc/passwd

發表迴響