From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191] helo=mx.sourceforge.net) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1WLV6F-00021c-KF for bitcoin-development@lists.sourceforge.net; Thu, 06 Mar 2014 10:00:23 +0000 Received-SPF: pass (sog-mx-1.v43.ch3.sourceforge.com: domain of gmail.com designates 74.125.82.47 as permitted sender) client-ip=74.125.82.47; envelope-from=natanael.l@gmail.com; helo=mail-wg0-f47.google.com; Received: from mail-wg0-f47.google.com ([74.125.82.47]) by sog-mx-1.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1WLV6D-0004vN-5H for bitcoin-development@lists.sourceforge.net; Thu, 06 Mar 2014 10:00:23 +0000 Received: by mail-wg0-f47.google.com with SMTP id x12so2819123wgg.6 for ; Thu, 06 Mar 2014 02:00:15 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.194.236.9 with SMTP id uq9mr8403332wjc.31.1394100015025; Thu, 06 Mar 2014 02:00:15 -0800 (PST) Received: by 10.194.54.10 with HTTP; Thu, 6 Mar 2014 02:00:14 -0800 (PST) Received: by 10.194.54.10 with HTTP; Thu, 6 Mar 2014 02:00:14 -0800 (PST) In-Reply-To: References: <0720C223-E9DD-4E76-AD6F-0308CA5B5289@gmail.com> <7E50E1D6-3A9F-419B-B01E-50C6DE044E0F@gmail.com> Date: Thu, 6 Mar 2014 11:00:14 +0100 Message-ID: From: Natanael To: Mike Hearn Content-Type: multipart/alternative; boundary=089e01493de02d55f804f3ed34cd X-Spam-Score: -0.6 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (natanael.l[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 1.0 HTML_MESSAGE BODY: HTML included in message -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1WLV6D-0004vN-5H Cc: bitcoin-development@lists.sourceforge.net Subject: Re: [Bitcoin-development] New side channel attack that can recover Bitcoin keys X-BeenThere: bitcoin-development@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Mar 2014 10:00:23 -0000 --089e01493de02d55f804f3ed34cd Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable You've heard of TRESOR? No, not Trezor. https://en.wikipedia.org/wiki/TRESOR Signing on the CPU, without touching RAM. - Sent from my phone Den 6 mar 2014 09:41 skrev "Mike Hearn" : > I'm wondering about whether (don't laugh) moving signing into the kernel > and then using the MTRRs to disable caching entirely for a small scratch > region of memory would also work. You could then disable pre-emption and > prevent anything on the same core from interrupting or timing the signing > operation. > > However I suspect just making a hardened secp256k1 signer implementation > in userspace would be of similar difficulty, in which case it would > naturally be preferable. > > > On Wed, Mar 5, 2014 at 11:25 PM, Gregory Maxwell wrot= e: > >> On Wed, Mar 5, 2014 at 2:14 PM, Eric Lombrozo >> wrote: >> > Everything you say is true. >> > >> > However, branchless does reduce the attack surface considerably - if >> nothing else, it significantly ups the difficulty of an attack for a >> relatively low cost in program complexity, and that might still make it >> worth doing. >> >> Absolutely. I believe these things are worth doing. >> >> My comment on it being insufficient was only that "my signer is >> branchless" doesn't make other defense measures (avoiding reuse, >> multsig with multiple devices, not sharing hardware, etc.) >> unimportant. >> >> > As for uniform memory access, if we avoided any kind of heap >> allocation, wouldn't we avoid such issues? >> >> No. At a minimum to hide a memory timing side-channel you must perform >> no data dependent loads (e.g. no operation where an offset into memory >> is calculated). A strategy for this is to always load the same values, >> but then mask out the ones you didn't intend to read... even that I'd >> worry about on sufficiently advanced hardware, since I would very much >> not be surprised if the processor was able to determine that the load >> had no effect and eliminate it! :) ) >> >> Maybe in practice if your data dependencies end up only picking around >> in the same cache-line it doesn't actually matter... but it's hard to >> be sure, and unclear when a future optimization in the rest of the >> system might leave it exposed again. >> >> (In particular, you can't generally write timing sign-channel immune >> code in C (or other high level language) because the compiler is >> freely permitted to optimize things in a way that break the property. >> ... It may be _unlikely_ for it to do this, but its permitted=E2=80=94 a= nd >> will actually do so in some cases=E2=80=94, so you cannot be completely = sure >> unless you check and freeze the toolchain) >> >> > Anyhow, without having gone into the full details of this particular >> attack, it seems the main attack point is differences in how squaring an= d >> multiplication (in the case of field exponentiation) or doubling and poi= nt >> addition (in the case of ECDSA) are performed. I believe using a branchl= ess >> implementation where each phase of the operation executes the exact same >> code and accesses the exact same stack frames would not be vulnerable to >> FLUSH+RELOAD. >> >> I wouldn't be surprised. >> >> >> ------------------------------------------------------------------------= ------ >> Subversion Kills Productivity. Get off Subversion & Make the Move to >> Perforce. >> With Perforce, you get hassle-free workflows. Merge that actually works. >> Faster operations. Version large binaries. Built-in WAN optimization an= d >> the >> freedom to use Git, Perforce or both. Make the move to Perforce. >> >> http://pubads.g.doubleclick.net/gampad/clk?id=3D122218951&iu=3D/4140/ost= g.clktrk >> _______________________________________________ >> Bitcoin-development mailing list >> Bitcoin-development@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/bitcoin-development >> > > > > -------------------------------------------------------------------------= ----- > Subversion Kills Productivity. Get off Subversion & Make the Move to > Perforce. > With Perforce, you get hassle-free workflows. Merge that actually works. > Faster operations. Version large binaries. Built-in WAN optimization and > the > freedom to use Git, Perforce or both. Make the move to Perforce. > > http://pubads.g.doubleclick.net/gampad/clk?id=3D122218951&iu=3D/4140/ostg= .clktrk > _______________________________________________ > Bitcoin-development mailing list > Bitcoin-development@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bitcoin-development > > --089e01493de02d55f804f3ed34cd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

You've heard of TRESOR?

No, not Trezor.

https://en.= wikipedia.org/wiki/TRESOR

Signing on the CPU, without touching RAM.

- Sent from my phone

Den 6 mar 2014 09:41 skrev "Mike Hearn"= ; <mike@plan99.net>:
I'm wondering about whether (don't laugh) moving s= igning into the kernel and then using the MTRRs to disable caching entirely= for a small scratch region of memory would also work. You could then disab= le pre-emption and prevent anything on the same core from interrupting or t= iming the signing operation.

However I suspect just making a hardened secp256k1 signer im= plementation in userspace would be of similar difficulty, in which case it = =C2=A0would naturally be preferable.
=

On Wed, Mar 5, 2014 at 11:25 PM, Gregory Max= well <gmaxwell@gmail.com> wrote:
On Wed, Mar 5, 2014 at 2:14 PM, Eric Lombrozo <elombrozo@gmail.com> wrote:
> Everything you say is true.
>
> However, branchless does reduce the attack surface considerably - if n= othing else, it significantly ups the difficulty of an attack for a relativ= ely low cost in program complexity, and that might still make it worth doin= g.

Absolutely. I believe these things are worth doing.

My comment on it being insufficient was only that "my signer is
branchless" doesn't make other defense measures (avoiding reuse, multsig with multiple devices, not sharing hardware, etc.)
unimportant.

> As for uniform memory access, if we avoided any kind of heap allocatio= n, wouldn't we avoid such issues?

No. At a minimum to hide a memory timing side-channel you must perfor= m
no data dependent loads (e.g. no operation where an offset into memory
is calculated). A strategy for this is to always load the same values,
but then mask out the ones you didn't intend to read... even that I'= ;d
worry about on sufficiently advanced hardware, since I would very much
not be surprised if the processor was able to determine that the load
had no effect and eliminate it! :) )

Maybe in practice if your data dependencies end up only picking around
in the same cache-line it doesn't actually matter... but it's hard = to
be sure, and unclear when a future optimization in the rest of the
system might leave it exposed again.

(In particular, you can't generally write timing sign-channel immune code in C (or other high level language) because the compiler is
freely permitted to optimize things in a way that break the property.
... It may be _unlikely_ for it to do this, but its permitted=E2=80=94 and<= br> will actually do so in some cases=E2=80=94, so you cannot be completely sur= e
unless you check and freeze the toolchain)

> Anyhow, without having gone into the full details of this particular a= ttack, it seems the main attack point is differences in how squaring and mu= ltiplication (in the case of field exponentiation) or doubling and point ad= dition (in the case of ECDSA) are performed. I believe using a branchless i= mplementation where each phase of the operation executes the exact same cod= e and accesses the exact same stack frames would not be vulnerable to FLUSH= +RELOAD.

I wouldn't be surprised.

---------------------------------------------------------------------------= ---
Subversion Kills Productivity. Get off Subversion & Make the Move to Pe= rforce.
With Perforce, you get hassle-free workflows. Merge that actually works. Faster operations. Version large binaries. =C2=A0Built-in WAN optimization = and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gam= pad/clk?id=3D122218951&iu=3D/4140/ostg.clktrk
_______________________________________________
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-de= velopment


-----------------------------------------------------------------------= -------
Subversion Kills Productivity. Get off Subversion & Make the Move to Pe= rforce.
With Perforce, you get hassle-free workflows. Merge that actually works. Faster operations. Version large binaries. =C2=A0Built-in WAN optimization = and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gam= pad/clk?id=3D122218951&iu=3D/4140/ostg.clktrk
__________________= _____________________________
Bitcoin-development mailing list
Bitcoin-develo= pment@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-de= velopment

--089e01493de02d55f804f3ed34cd--