比特幣系統裏面如何驗證某個比特幣是誰的,誰擁有這個比特幣。咱們仍是先對標一下銀行系統來理解這個問題。安全
平時咱們在刷卡的時候,須要提供銀行卡號和密碼,若是匹配,就能夠進行支付。 這時候若是出現盜刷怎麼辦呢。咱們確定是馬上報警,而後銀行就會覈對帳戶的全部者是否是我。銀行覈對的過程,須要藉助開戶時的咱們提供的我的信息。網絡
其實就是在開戶的時候肯定了帳戶的全部權,在肯定了這個全部權以後,而後纔是轉帳的操做。若是銀行肯定了某一筆001-002的支付不是本人操做的,則銀行會撤銷這筆記帳加密
而在比特幣系統裏,是點對點的交易,若是在沒有第三方的狀況下,肯定帳號的全部權。3d
實際上,帳戶是用一個地址來標示的,轉帳的過程實際上就是從一個地址轉換到另一個地址。帳本上是不保存我的信息的。cdn
上面這樣一條信息就是一個轉帳的記錄,他記錄了從"2A39CBa2390FDe"到"AAC9CBa239aFcc"的一筆轉帳,轉移了0.2個比特幣,若是誰能用這一個地址可以進行支付,那麼誰就擁有了這個帳戶的全部權。blog
剛剛說到比特幣系統裏面,是用地址來表示一個帳號的,其實比特幣裏面一個地址會有一個對應的私鑰,誰有了這個私鑰,誰就可以使用這個地址進行支付,因此私鑰必定要保管好,若是泄漏了的話,比特幣就有可能丟失,而不像銀行系統裏面能夠重置或者找回。ip
而且比特幣系統不像銀行系統裏面帳號和密碼是沒有任何關係的,密碼不能推導出帳號,帳號也不能推導出密碼。比特幣地址和私鑰是一個非對稱的關係,私鑰在通過一系列的has運算以後(其中包括兩次hash),就可以獲得比特幣的地址,可是地址不能反推出私鑰。hash
誰擁有地址的私鑰,誰就可以進行支付,這樣,比特幣的帳戶全部權問題,就變成了如何在不泄漏私鑰的狀況下,來證實咱們擁有某個地址的私鑰。(由於若是咱們把私鑰亮出來給你們看,以此來告訴你們咱們擁有這個私鑰,那麼私鑰就泄漏了,其餘人也能夠用這個私鑰進行支付)it
這裏就用到了非對稱加密技術的加密技術,對交易進行簽名,這個過程分爲兩部分io
在獲得簽名之後,付款的節點就會在整個網絡裏進行廣播,廣播的內容包含交易的原始信息還有交易的簽名信息。
在節點收到廣播之後,就會對交易信息和簽名信息進行驗證。驗證簽名信息是否是付款方用私鑰對交易信息進行簽名產生的
驗證的過程,是對簽名和付款方地址進行一個驗證運算獲得一個摘要,判斷這個摘要是否是交易信息的hash運算結果,若是是,則驗證經過,將交易信息寫入帳本,繼續廣播,不然什麼也不作
實際上,簽名和驗證是一段逆運算
這時候幾個過程就明瞭了,簽名由私鑰簽名發出之後,這筆交易才能別其餘的節點驗證經過,因此整個帳戶的全部權問題,是用私鑰來進行控制的