Bitcoin Forum
August 27, 2024, 07:51:28 PM
Welcome,
Guest
. Please
login
or
register
.
News
: All versions of Windows are affected by a
critical security bug
; make sure you update.
Home
Help
Search
Login
Register
More
Bitcoin Forum
>
Local
>
中文 (Chinese)
>
比特币官方钱包加解密解读
Pages: [
1
]
« previous topic
next topic »
Print
Author
Topic: 比特币官方钱包加解密解读 (Read 1484 times)
DSPay
(OP)
Member
Offline
Activity: 105
Merit: 10
比特币官方钱包加解密解读
December 15, 2014, 03:09:45 AM
#1
钱包安全性的理解
关于比特币钱包的安全性,主要从钱包的对私钥的管理上着手。在此,我想解刨一下源码中关于钱包加密、解密以及密码的修改中对私钥的具体操,稍后分析一下这样做的安全性理解。
钱包加密
比特币客户端中的核心是私钥,拥有私钥就拥有私钥对应比特币的使用权限,所以,加密钱包的核心对象就显而易见——私钥。在解剖加密过程前,我们先捋一捋其中的一些名词,稍不小心就会把这些名词给混淆:
① 密码:从外部输入的,用来加解密钱包的字符串。
② 主密钥:一个32字节的随机数,直接用于钱包中私钥的加密,加密完后立即删除。
③ 主密钥密文:根据外部输入【密码】对【主密钥】进行AES256CBC加密的结果,该加密为对称加密。
④ 主密钥密文生成参数:主要是保存有【主密钥】得到【主密钥密文】中参与运算的一些参数。由该参数配合【密码】可以反推得到【主密钥】。
⑤ 私钥:椭圆曲线算法私有秘钥,即钱包中的核心,拥有私钥就拥有私钥对应的比特币使用权,而私钥对应的公钥只是关联比特币,没有比特币的使用权限。
⑥ 私钥密文:【主密钥】对【私钥】进行AES256CBC加密解密的结果,该加密为对称加密。
首先,程序生成32个字节随机数作为【主密钥】,然后根据外部输入的【密码】结合生成的【主密钥密文生成参数】一起对【主密钥】进行AES256CBC加密,加密结果为【主密钥密文】。稍后,我们将【主密钥】对钱包内的【私钥】进行AES256CBC加密得到【私钥密文】,待加密完成后,删除【私钥】,保留【私钥密文】;同时删除主密钥,保留【主密钥密文】和【主密钥密文生成参数】。就这样,钱包的加密就完成了。然后我们来总结一下加密过程的输入输出:输入:【密码】;中间生成:【主密钥】、【主密钥密文生成参数】、【主密钥密文】、【私钥密文】;最终保留:【主密钥密文生成参数】、【主密钥密文】、【私钥密文】;内部输入:【私钥】。
钱包解密
在顺利理解的前提下,理解钱包解密就顺水推舟了;鉴于加密钱包就是加密【私钥】,很多人可能会自然的认为解密钱包就是将【私钥密文】还原成【私钥】。这个思路是没错的,但是里面具体的操作其实并没有将所有【私钥密文】解密成【私钥】,具体操作听我慢慢道来:
我们有注意到,所有的【私钥】都是被一个32字节随机数【主密钥】加密的,所以解密【私钥】,首先要将【主密钥】还原。而经过加密钱包后,我们只保留了【主密钥密文】和【主密钥密文生成参数】,同时我们还知道,这两个数据再加上【密码】就可以反推出【主密钥】。到此,我想你应该有一个清晰的解密思路了。
解密钱包,首先根据外部输入的【密码】结合保存的【主密钥密文】和【主密钥密文生成参数】恢复出【主密钥】,得到了【主密钥】,那么所有的【私钥密文】就可以被解密成私钥【私钥】。但是,要注意一下,这里钱包并没有将所有的【私钥密文】解密成【私钥】,而是解密钱包就此终止。所以,你要记住解密钱包并没有解密所有【私钥密文】,而是恢复出【主密钥】的过程。当然你不用担心,拥有【主密钥】和【私钥密文】,获取【私钥】是轻而易举的。这样,在每次使用需要使用【私钥】的时候,都是通过【主密钥】去解密一次【私钥密文】,用完之后我们依然保存的是【私钥密文】。
修改密码
在理解上述两个过程后,再来看修改钱包密码就很容易了。我们知道在加解密钱包的过程中,我们并没有使用我们输入的【密码】直接加密钱包中的【私钥】,而是将【密码】间接地关联【主密钥】,使用【主密钥】来加解密【私钥】。所以【主密钥】就成为了加解密的核心,而【密码】是加密【主密钥】得到【主密钥密文】的,所以叫【密码】关联于【主密钥】。加密后的钱包中没有保存【主密钥】,而是保存了【主密钥密文】和【主密钥密文生成参数】。
比特币修改【密码】的做法是:输入【新密码】和【旧密码】,用【旧密码】结合【主密钥密文】和【主密钥密文生成参数】解密出【主密钥】,然后使用【新密码】重新加密【主密钥】得到【新主密钥密文】,然后删除【主密钥】而终止。
总结一下修改【密码】的过程,我们发现整个过程中【主密钥】和【私钥密文】都没变,变化的是【主密钥密文】。所以修改【密码】其实主要是修改【主密钥密文】的过程,之后就只能通过【新密码】来解密出【主密钥】进而解密【私钥密文】达到解密钱包的效果。
安全性理解
分析了加密钱包、解密钱包以及修改钱包密码过程,我来简单的整体理解一下钱包的加解密的安全性。根据上面的分析,我们知道加密钱包其实是用32字节随机数【主密钥】去加密【私钥】的,我们输入的【密码】并没有直接加密【私钥】,而是通过关联【主密钥】间接地加密【私钥】。同时我们知道钱包中私钥最核心的也是32字节随机数,32字节随机数的私钥要通过暴力破解基本是不可能的,我们暂时理解为32字节随机数作为密码绝对安全。整个加密钱包过程其实就是将我们各种可能不安全的个性【密码】转换成关联于一个32字节的随机数【主密钥】来加密【私钥】,这个时候可以理解为将【密码】关联于一个和私钥有着同样安全等级的【主密钥】,然后用【主密钥】来直接保证【私钥】的安全。
解密钱包和修改钱包密码的过程中,我们需要尽可能的保证【私钥】的安全,不让【私钥】出现在内存中。所以比特币解密钱包的时候,并没有将所有【私钥】解密出来放到内存中,而是解密【主密钥】放在内存中,需要使用【私钥】时才用【主密钥】去解密【私钥密文】得到【私钥】,使用完后立即清除【私钥】。这样,我们最大限度的防止了【私钥】出现在内存中出现的概率,而是将所有的操作集中在【主密钥】一个点上,我们的原则就是保证【私钥】被恶意窃取。
以上为仅为个人研究结论,如有异议欢迎到大豆支付探讨。
作者:大豆支付Spark
官方微博:@大豆支付官网
http://weibo.com/soypay
捐赠地址:1fNrUqHbKG3ARVmkBmP1kktJctwnfimB9
原文:
http://www.8btc.com/analyze-the-bitcoin-wallet
We are the first!--DACRS(Distributed Autonomous Corporations RuntimeSystem)dhDYJGUU9xEhpsi3zJ5Ar6TY7Qui29tNQf
wang_yan
Sr. Member
Offline
Activity: 448
Merit: 250
Re: 比特币官方钱包加解密解读
December 15, 2014, 03:15:40 AM
#2
不错,学习一下
▌
BIT.AC
▐
.
Multicurrency wallet :: Instant Exchange :: Affiliate program
.
.
฿itcoin,
Ethereum,
Ðash
,
LISK,
Monero
and many more...
.
❰
TRY NOW
❱
...
IOJD
Sr. Member
Offline
Activity: 252
Merit: 250
IO * JD
Re: 比特币官方钱包加解密解读
December 15, 2014, 05:35:04 AM
#3
是不是别人只要知道了你的私钥,就算你在怎样加密都是无用的? 有没有那种在导入私钥的时候需要输入密码的加密。
bit
★
Starz
-
Dream Big, Win Bigger
Bitcoin Casino | Live Casino & Exclusive land-based slots | Biggest win to date:
66.96 BTC
| 100% First Deposit Bonus | Instant Transfers
Zhan21
Sr. Member
Offline
Activity: 420
Merit: 250
Re: 比特币官方钱包加解密解读
December 15, 2014, 09:04:32 AM
#4
难以理解。私钥和密码应该缺一不可罢。
Troonetpt
Sr. Member
Offline
Activity: 322
Merit: 250
Re: 比特币官方钱包加解密解读
December 16, 2014, 01:56:59 AM
#5
good
Ingramtg
Legendary
Offline
Activity: 861
Merit: 1000
Re: 比特币官方钱包加解密解读
December 16, 2014, 09:55:08 AM
#6
Quote from: IOJD on December 15, 2014, 05:35:04 AM
是不是别人只要知道了你的私钥,就算你在怎样加密都是无用的? 有没有那种在导入私钥的时候需要输入密码的加密。
是的, 所以要特别注意自己的私钥不要泄露,一旦泄露就会被人拿去了,无聊你怎么加密都是没有用的
Pages: [
1
]
Print
Bitcoin Forum
>
Local
>
中文 (Chinese)
>
比特币官方钱包加解密解读
« previous topic
next topic »
Jump to:
Please select a destination:
-----------------------------
Bitcoin
-----------------------------
=> Bitcoin Discussion
===> Legal
===> Press
===> Meetups
===> Important Announcements
=> Development & Technical Discussion
===> Wallet software
=====> Electrum
=====> Bitcoin Wallet for Android
=====> BitcoinJ
=====> Armory
=====> Mycelium
=====> Hardware wallets
=> Mining
===> Mining support
===> Pools
===> Mining software (miners)
===> Hardware
=====> Group buys
===> Mining speculation
=> Bitcoin Technical Support
=> Project Development
-----------------------------
Economy
-----------------------------
=> Economics
===> Speculation
=> Marketplace
===> Goods
=====> Computer hardware
=====> Digital goods
=======> Invites & Accounts
=====> Collectibles
===> Services
===> Currency exchange
===> Gambling
=====> Games and rounds
=====> Investor-based games
=====> Gambling discussion
===> Lending
=====> Long-term offers
===> Securities
===> Auctions
===> Service Announcements
=====> Micro Earnings
===> Service Discussion
=====> Web Wallets
=====> Exchanges
=> Trading Discussion
===> Scam Accusations
===> Reputation
-----------------------------
Other
-----------------------------
=> Meta
===> New forum software
===> Bitcoin Wiki
=> Politics & Society
=> Beginners & Help
=> Off-topic
=> Serious discussion
===> Ivory Tower
=> Archival
===> Корзина
===> CPU/GPU Bitcoin mining hardware
===> Chinese students
===> Obsolete (buying)
===> Obsolete (selling)
===> MultiBit
-----------------------------
Alternate cryptocurrencies
-----------------------------
=> Altcoin Discussion
=> Announcements (Altcoins)
===> Tokens (Altcoins)
=> Mining (Altcoins)
===> Pools (Altcoins)
=> Marketplace (Altcoins)
===> Service Announcements (Altcoins)
===> Service Discussion (Altcoins)
===> Bounties (Altcoins)
=> Speculation (Altcoins)
-----------------------------
Local
-----------------------------
=> العربية (Arabic)
===> العملات البديلة (Altcoins)
=====> النقاشات
===> إستفسارات و أسئلة المبتدئين
===> التعدين
===> النقاشات الأخرى
===> منصات التبادل
=> Bahasa Indonesia (Indonesian)
===> Marketplace (Bahasa Indonesia)
===> Mining (Bahasa Indonesia)
===> Altcoins (Bahasa Indonesia)
===> Trading dan Spekulasi
===> Ekonomi, Politik, dan Budaya
===> Topik Lainnya
=> Español (Spanish)
===> Mercado y Economía
=====> Servicios
=====> Trading y especulación
===> Hardware y Minería
===> Esquina Libre
===> Mercadillo
=====> Mexico
=====> Argentina
=====> España
=====> Centroamerica y Caribe
===> Primeros pasos y ayuda
===> Altcoins (criptomonedas alternativas)
=====> Minería de altcoins
=====> Servicios
=====> Tokens (Español)
=> 中文 (Chinese)
===> 跳蚤市场
===> 山寨币
===> 媒体
===> 挖矿
===> 离题万里
=> Hrvatski (Croatian)
===> Trgovina
===> Altcoins (Hrvatski)
=====> Announcements (Hrvatski)
===> Off-topic (Hrvatski)
=> Deutsch (German)
===> Anfänger und Hilfe
===> Mining (Deutsch)
===> Trading und Spekulation
===> Projektentwicklung
===> Off-Topic (Deutsch)
===> Treffen
===> Presse
===> Altcoins (Deutsch)
=====> Announcements (Deutsch)
===> Marktplatz
=====> Auktionen
=====> Suche
=====> Biete
=> Ελληνικά (Greek)
===> Αγορά
===> Mining Discussion (Ελληνικά)
===> Altcoins (Ελληνικά)
=====> Altcoin Announcements (Ελληνικά)
=====> Altcoin Mining (Ελληνικά)
=> עברית (Hebrew)
=> Français
===> Actualité et News
===> Débutants
===> Discussions générales et utilisation du Bitcoin
===> Mining et Hardware
===> Économie et spéculation
===> Place de marché
=====> Échanges
=====> Produits et services
=====> Petites annonces
===> Le Bitcoin et la loi
===> Wiki, documentation et traduction
===> Développement et technique
===> Vos sites et projets
===> Hors-sujet
===> Altcoins (Français)
=====> Annonces
=> India
===> Mining (India)
===> Marketplace (India)
===> Regional Languages (India)
===> Press & News from India
===> Alt Coins (India)
===> Buyer/ Seller Reputations (India)
===> Off-Topic (India)
=> Italiano (Italian)
===> Guide (Italiano)
===> Progetti
===> Discussioni avanzate e sviluppo
===> Trading, analisi e speculazione
===> Mercato
=====> Mercato valute
=====> Beni
=====> Servizi
=====> Esercizi commerciali
=====> Hardware/Mining (Italiano)
=====> Gambling (Italiano)
===> Accuse scam/truffe
===> Mining (Italiano)
===> Alt-Currencies (Italiano)
=====> Annunci
===> Raduni/Meeting (Italiano)
===> Crittografia e decentralizzazione
===> Off-Topic (Italiano)
=> 日本語 (Japanese)
===> アルトコイン
=> Nederlands (Dutch)
===> Markt
===> Gokken/lotterijen
===> Mining (Nederlands)
===> Beurzen
===> Alt Coins (Nederlands)
===> Off-topic (Nederlands)
===> Meetings (Nederlands)
=> Nigeria (Naija)
===> Politics and society (Naija)
===> Off-topic (Naija)
=> 한국어 (Korean)
===> 대체코인 Alt Coins (한국어)
=> Pilipinas
===> Altcoins (Pilipinas)
=====> Altcoin Announcements (Pilipinas)
===> Pamilihan
===> Others (Pilipinas)
=> Polski
===> Tablica ogłoszeń
===> Alternatywne kryptowaluty
=====> Nowe kryptowaluty i tokeny
=====> Tablica ogłoszeń (altcoiny)
=> Português (Portuguese)
===> Primeiros Passos (Iniciantes)
===> Economia & Mercado
===> Mineração em Geral
===> Desenvolvimento & Discussões Técnicas
===> Criptomoedas Alternativas
===> Brasil
===> Portugal
=> Русский (Russian)
===> Новички
===> Бизнес
=====> Барахолка
=====> Обменники
===> Идеи
===> Кодеры
===> Майнеры
===> Политика
===> Трейдеры
===> Альтернативные криптовалюты
=====> Токены
=====> Бayнти и aиpдpoпы
===> Хайпы
===> Работа
===> Разное
===> Oбcyждeниe Bitcoin
=====> Новости
=====> Юристы
=> Română (Romanian)
===> Anunturi importante
===> Offtopic
===> Market
=====> Discutii Servicii
===> Minerit
===> Tutoriale
===> Bine ai venit!
===> Presa
===> Altcoins (Monede Alternative)
=====> Anunturi Monede Alternative
=> Skandinavisk
=> Türkçe (Turkish)
===> Bitcoin Haberleri
===> Pazar Alanı
===> Madencilik
===> Ekonomi
===> Servisler
=====> Fonlar
===> Proje Geliştirme
===> Alternatif Kripto-Paralar
=====> Madencilik (Alternatif Kripto-Paralar)
=====> Duyurular (Alternatif Kripto-Paralar)
===> Konu Dışı
===> Yeni Başlayanlar & Yardım
===> Buluşmalar
=> Other languages/locations
Loading...