首先再次聲明”.onion”的域名[1],跟我們腦袋中的DNS不一樣它沒有一個IP對照表,所以不會洩漏hidden
server的主機位置,至於怎麼生成一個網址我就姑且當作RSA private key算出public key
然後經過已經過時的sha1[2]算一下雜湊值,再用base
32[3]重新編一次得到我們超級醜的.onion域名,範例”http://oxoujukneztb6wxg.onion”,base32當中應該沒有大寫有沒有奇怪的符號。
.onion網站的搭建不需要以公有IP的方是搭建
.onion的網站不需要在防火牆新增port規則
那如何搭建一個.onion網站呢,首先你在你自己的電腦中搭建一個網站,最簡單的去XAMPP[5]下載一個,搓一下很快。好了我們有個網站了,接下來去Tor
project下載是windows 的話選windows”Expert Bundle”[4],不要選瀏覽器壓我就不了你。
下載完之後,解壓縮阿,看到資料夾裡面有個tor.exe,先點開一遍讓他跑完,跑完關掉,跑不完的我看你在一個有網路審查的地方,估計網管再看你它很火。順利的朋友繼續到”C:\Users\自己的使用者名稱阿\AppData\Roaming\tor”這個資料夾底下,新增一個txt,命名為torcc,然後把副檔名拿掉存檔,接下來打開這個電腦辨識不出來是記事本的檔案用記事本開啟,添加幾行
HiddenServiceDir C:\ #這會是你存’放網站private key 檔案跟public檔案的地方啊,喜歡改地方也可以
HiddenServicePort 80 127.0.0.1:81 #左邊的數字是你希望在哪個port開hidden service,右邊是你希望把本地端的哪個port接上去左邊的
改完啦,存檔,回到一開始解壓縮的資料夾執行tor.exe,恭喜你hidden
service順利搭成功了,網站名稱會出現在剛剛設定的”HiddenServiceDir”中的publickey,privatekey要保存好,public丟掉沒關係,因為tor美運作一次就會從private
key重新推倒一遍又會重新建立public key 。這時就可以拿 .onion域名去Tor 瀏覽器 唬唬人了去吧。
[1]https://zh.wikipedia.org/wiki/.onion
[2]https://zh.wikipedia.org/wiki/SHA-1
[3]https://en.wikipedia.org/wiki/Base32
[4]https://www.torproject.org/download/download.html.en
[5]https://www.apachefriends.org/zh_tw/index.html
from https://awesome-doge.github.io/%E6%90%AD%E5%BB%BAtor-%E4%B8%AD%E7%9A%84-onion-%E7%B6%B2%E7%AB%99/
------
.onion 生成 步驟(tor v2 & v3 )
看了一些hidden services
的文獻,大致把.onion的域名生成的步驟畫成下面的圖片,之前有再研究比特幣地址生成的我,發現這樣的生成.onion域名的過程,與比特幣地址生成有相當類似的部分,因為都是式Random生成私鑰,經過私鑰轉公鑰的算法,經過HASH,最後在經過BASE重新編碼,不難發現概念是一樣的。所以誕生出來的比特幣地址或是.onion域名都有它的隨機性。
v2 .onion地址生成過程
只要有錢有時間就可以爆破出一個美麗的域名或是比特幣地址。
不難發現洋蔥網路所採用的密碼演算法都相當的過氣,如SHA-1、RSA-1024,當然Tor Project 也意識到這樣的問題,在最新版本的v3[2]中,已經闡述了會將SHA-1換成SHA-3,RSA-1024換成橢圓曲線。
Better crypto (replaced SHA1/DH/RSA1024 with SHA3/ed25519/curve25519)
原文
.onion
SYNTAX: [digest].onion
[ignored].[digest].onion
The digest is the first eighty bits of a SHA1 hash of the identity key for
a hidden service, encoded in base32.
When Tor sees an address in this format, it tries to look up and connect to
the specified hidden service. See rend-spec.txt for full details.
The "ignored" portion of the address is intended for use in vhosting, and
is supported in Tor 0.2.4.10-alpha and later.
著名的 .onion 域名網站
Facebook
他們使用超過500,000個核心,耗資 US$100,000,耗時一周來反復生成.onion域名,產物” facebookcorewwwi.onion”。
BlockChain.info
花費了200–300美元,大約24小時使用AWS G1實例和六個ATI 來創建自己的.onion域名,產物”blockchainbdgpzk.onion”。
ExpressVPN
一般的電腦耗時兩周,產物”expressobutiolem.onion”。
[1]https://www.expressvpn.com/blog/how-to-create-a-onion-address/
[2]https://blog.torproject.org/tor-0329-released-we-have-new-stable-series
v3 .onion地址生成過程
在v3的地址生成中已經放棄了sha-1也沒有放上新的sha-3
256 bits 的 ECC key 強度大約是 3072 bits RSA key (以現在最好的攻擊演算法來估算)。
直接放 public key 不需要經過 hash function 計算,可以避免掉 hash function 被找到 collision 時的風險。[3]
採用了新的公私鑰轉換演算法ed25519[1],舊有的RSA已經不再是推薦安全的演算法。
ed25519 算法相對於secp256k1
更加高效,同時安全性也非常高。目前也被廣泛應用很多加密數字貨幣項目中,著名的項目例如Zcash、公證通(Factom)、新經幣(NEM)等等,
以太坊的創始人Vitalik 也曾在博客中公開表示,以太坊計劃在新版本中切換到ed25519。ed25519
的好處是在不損失安全級別的情況下,顯著提昇運算效率,其效率是secp256k1 的很多倍。以ed25519
的論文中的實驗為例,該算法完成一次簽名需要87548 個CPU 循環,一個4 核2.4GHz 的CPU 每秒可以完成109000
次簽名。密鑰的生成也非常高效。而ed25519 的安全級別和secp256k1 的級別相同,都是128 位的安全級別。[2]
新的v3比較特別的是他加入了CHECKSUM,這個CHECKSUM與比特幣地址生成中的CHECKSUM不同,比特幣的版本是取double sha-256取前幾個bit當作CHECKSUM,而.onion v3 採用的是簽章算法中的CHECKSUM。
最後一個步驟是把Public Key 、CHECKSUM、版本號放在一起做base32編碼,產物為56個字。
原文
1. Encoding onion addresses [ONIONADDRESS]
The onion address of a hidden service includes its identity public key, a
version field and a basic checksum. All this information is then base32
encoded as shown below:
onion_address = base32(PUBKEY | CHECKSUM | VERSION) + ".onion"
CHECKSUM = H(".onion checksum" | PUBKEY | VERSION)[:2]
where:
- PUBKEY is the 32 bytes ed25519 master pubkey of the hidden service.
- VERSION is an one byte version field (default value '\x03')
- ".onion checksum" is a constant string
- CHECKSUM is truncated to two bytes before inserting it in onion_address
[1]https://ed25519.cr.yp.to/
[2]https://zhuanlan.zhihu.com/p/28764295
[3]https://blog.gslin.org/archives/2017/11/03/7725/%E4%B8%8B%E4%B8%80%E4%BB%A3%E7%9A%84-tor-hidden-service/
[4]https://gitweb.torproject.org/torspec.git/plain/proposals/224-rend-spec-ng.txt
from https://awesome-doge.github.io/onion-%E7%94%9F%E6%88%90-%E6%AD%A5%E9%A9%9F-tor-v3/