原始文献 / 邮件 / Bitcoin P2P e-cash paper

Bitcoin P2P e-cash paper

Cryptography Mailing List · 2008-11-15 18:02:00 UTC

FromSatoshi Nakamoto
SubjectBitcoin P2P e-cash paper
Date2008-11-15 18:02:00 UTC
ListCryptography Mailing List · 原文

Ray Dillinger 写道:
> 实现这一点的一种方法是,
> 让收到币的人生成一对非对称密钥对,
> 然后把其中一半随交易一起公布。
> 以后为了花费这枚币,他/她必须
> 证明自己持有该非对称密钥对的另一半,
> 可能是用它对新卖方提供的密钥进行签名。

对,这是 ECC 数字签名。每笔交易都使用一对新的密钥对。

它不是假名制(用 nyms 标识人的身份)意义上的匿名,但至少具有一点假名性:币的下一个动作可以被识别为来自该币的所有者。

嗯。这让我有些不舒服。你是说
根本不做任何识别和排除不合作节点的努力?
我觉得这会导致麻烦,甚至可能引发 DOS 攻击。

我们对识别任何人没有任何依赖。如你所说,那是徒劳的,sock puppets(傀儡账号)就能轻而易举地将其攻破。

确立某人真实性的凭证,是其能够提供 CPU 算力的能力。

等到……等到什么?人们怎么知道一笔交易
何时变得不可撤销?所谓"几个"区块是三个?
三十个?一百个?这取决于节点数量吗?
是跟节点数量呈对数关系还是线性关系?

第 11 节计算了受攻击时的最坏情况。通常,5 或 10 个区块就足够了。如果你卖的东西不值得攻击者发动全网规模的攻击来窃取,实际中可以把等待时间压得更短。

但在没有身份的情况下,如果他们已经拿到了
用双重支付骗来的货物(网站访问权、下载,等等),
即使花费无效,他们也没有什么损失。
商家只能拿着"无效"的币吃哑巴亏,
除非他们等上那个神奇的"几个区块"
(他们又怎么知道要等几个?),
然后再把花费者视为已付款。

消费者不会接受:花了币,还要等一个小时
交易清算后才能做他花币要做的事。
商家也不会接受:当发现收到的币无效是因为
顾客双重支付时,无法向顾客追偿。

这是版本 2 层面的问题,我相信对大多数应用来说都可以解决得相当令人满意。

关键是抢先把你的交易在网络上传播开。想想六度空间——它是呈指数扩散的。一笔交易大概只需约 2 分钟就能广泛传播开,迟到的竞争者在第一笔交易席卷整个网络之前,几乎没有机会抢占到多少节点。在这 2 分钟里,商家的节点可以监视是否有双重支付的交易。双重支付者没法在商家收不到的情况下把他的替代交易广播到全世界,所以他必须先等一等才能动手。

如果真实交易传播到了 90% 的节点,而双重支付的交易只传到了 10%,那么双重支付者只有 10% 的概率不用付钱跑掉,90% 的概率他的钱会被花掉。对于几乎所有类型的商品,骗子这么干都不划算。

像网站访问权、下载这类信息商品是不可销赃的(non-fencible)。没人能靠偷网站访问权或下载为生。他们去文件共享网络就能偷到。大多数即时获取型产品并没有很大的被偷动机。

如果商家真的被盗成问题,他们可以让顾客等 2 分钟,或者等电子邮件里的某样东西——很多商家已经这样做了。如果真想优化,对于大文件下载,可以在交易被确认双重支付后在下载中途取消下载。如果是网站访问权,通常让顾客先访问 5 分钟、然后在交易被拒绝时切断访问,也不算什么大事。很多这类网站本来就有免费试用。

Satoshi Nakamoto

---------------------------------------------------------------------
The Cryptography Mailing List
Unsubscribe by sending "unsubscribe cryptography" to majordomo at metzdowd.com

英文原文

Ray Dillinger wrote:
> One way to do this would be
> to have the person recieving the coin generate an asymmetric
> key pair, and then have half of it published with the
> transaction. In order to spend the coin later, s/he must
> demonstrate posession of the other half of the asymmetric
> key pair, probably by using it to sign the key provided by
> the new seller.

Right, it's ECC digital signatures. A new key pair is used for every
transaction.

It's not pseudonymous in the sense of nyms identifying people, but it
is at least a little pseudonymous in that the next action on a coin
can be identified as being from the owner of that coin.

Mmmm. I don't know if I'm comfortable with that. You're saying
there's no effort to identify and exclude nodes that don't
cooperate? I suspect this will lead to trouble and possible DOS
attacks.

There is no reliance on identifying anyone. As you've said, it's
futile and can be trivially defeated with sock puppets.

The credential that establishes someone as real is the ability to
supply CPU power.

Until.... until what? How does anybody know when a transaction
has become irrevocable? Is "a few" blocks three? Thirty? A
hundred? Does it depend on the number of nodes? Is it logarithmic
or linear in number of nodes?

Section 11 calculates the worst case under attack. Typically, 5 or
10 blocks is enough for that. If you're selling something that
doesn't merit a network-scale attack to steal it, in practice you
could cut it closer.

But in the absence of identity, there's no downside to them
if spends become invalid, if they've already received the
goods they double-spent for (access to website, download,
whatever). The merchants are left holding the bag with
"invalid" coins, unless they wait that magical "few blocks"
(and how can they know how many?) before treating the spender
as having paid.

The consumers won't do this if they spend their coin and it takes
an hour to clear before they can do what they spent their coin on.
The merchants won't do it if there's no way to charge back a
customer when they find the that their coin is invalid because
the customer has doublespent.

This is a version 2 problem that I believe can be solved fairly
satisfactorily for most applications.

The race is to spread your transaction on the network first. Think 6
degrees of freedom -- it spreads exponentially. It would only take
something like 2 minutes for a transaction to spread widely enough
that a competitor starting late would have little chance of grabbing
very many nodes before the first one is overtaking the whole network.
During those 2 minutes, the merchant's nodes can be watching for a
double-spent transaction. The double-spender would not be able to
blast his alternate transaction out to the world without the merchant
getting it, so he has to wait before starting.

If the real transaction reaches 90% and the double-spent tx reaches
10%, the double-spender only gets a 10% chance of not paying, and 90%
chance his money gets spent. For almost any type of goods, that's
not going to be worth it for the scammer.

Information based goods like access to website or downloads are
non-fencible. Nobody is going to be able to make a living off
stealing access to websites or downloads. They can go to the file
sharing networks to steal that. Most instant-access products aren't
going to have a huge incentive to steal.

If a merchant actually has a problem with theft, they can make the
customer wait 2 minutes, or wait for something in e-mail, which many
already do. If they really want to optimize, and it's a large
download, they could cancel the download in the middle if the
transaction comes back double-spent. If it's website access,
typically it wouldn't be a big deal to let the customer have access
for 5 minutes and then cut off access if it's rejected. Many such
sites have a free trial anyway.

Satoshi Nakamoto

---------------------------------------------------------------------
The Cryptography Mailing List
Unsubscribe by sending "unsubscribe cryptography" to majordomo at metzdowd.com