Search content
Sort by

Showing 20 of 155 results by mollison
Post
Topic
Board Service Discussion
Re: campbx phishing attack?
by
mollison
on 20/12/2013, 07:39:51 UTC
This is unbelievable. Customer data compromised and campbx doesn't say anything?  Wtf. Anyone have a response from campbx yet?

Yes. Got one about 2 hours ago. See text below.

Quote
Please do not reply or share your login details to any other trading platforms other than https://campbx.com (and https://testnet.campbx.com) to protect your funds. You may see emails generated from phishing websites like campbx.be and cambx.eu. We are trying to investigate for the same.

So no specifics but we can infer that they're aware of and acknowledge that phishing is going on.
Post
Topic
Board Service Discussion
Re: campbx phishing attack?
by
mollison
on 19/12/2013, 17:49:15 UTC
I submitted a high-priority ticket to their Helpdesk system and linked them to this thread.

I, for one, will not be logging in to CampBX until/unless they provide more information.

Don't get me wrong, they have been a great service in the past for me, no problems ever.
Post
Topic
Board Service Discussion
Re: campbx phishing attack?
by
mollison
on 19/12/2013, 17:43:16 UTC
I got it too.

I am really glad that CampBX never had any bank account info, unlike Coinbase.

Looking forward to hearing more info about this as it is revealed, particularly a response from CampBX.
Post
Topic
Board Goods
Re: Simple Bitcoin Logo T-shirt - supplies limited!
by
mollison
on 25/05/2013, 01:01:23 UTC
I got mine in the mail a few days ago and am now wearing it. Very happy. Thanks, jwzguy!
Post
Topic
Board Project Development
Re: [ANN] Bitcoin on Blueseed, the international waters startup ship
by
mollison
on 11/05/2013, 07:24:34 UTC
Blueseed has always seemed extremely cool to me.

I'm absolutely thrilled to see Blueseed reaching out to the bitcoin community and trying to incorporate bitcoin into their plans.

Best of luck!

Is there a way to get on the waitlist as a "lifestyle business"? Or, just to live there? I found this to be a bit unclear on the website.
Post
Topic
Board Bitcoin Discussion
Re: WARNING! Bitcoin will soon block small transaction outputs
by
mollison
on 06/05/2013, 11:40:30 UTC
So my new suggestion is: Set a safe upper limit on the number of transaction outputs per block. Blocks with more outputs would be invalid and rejected by the network.

Actually, an improvement on the last suggestion.

Determine an acceptable (given technology) rate of growth of the total set of unspent outputs. Every 2 weeks, adjust the number of (new unspent outputs created - previous unspent outputs spent) allowed per block, based on how closely the maximum rate of growth is being tracked.

This makes the size of all unspent outputs a resource that is subject to an economic feedback loop, just as we already have (in theory) with the total size of each block. That minimizes transaction fees without ruling out legitimate transactions that look like dust (micropayments).

Miners could pay users to spend lots of dust outputs, since it allows them to include more unspent outputs (which they can charge for) in their block.
Post
Topic
Board Bitcoin Discussion
Re: WARNING! Bitcoin will soon block small transaction outputs
by
mollison
on 06/05/2013, 10:07:47 UTC
Why not just decide an acceptable rate of growth for the blockchain per annum (e.g. 10 GB), limit block sizes accordingly, assume all blocks will potentially be completely filled up, and be done with it?

I need to update my suggestion. I have been told on IRC that the real problem is considered to be that unspent transaction outputs have to be stored in every fully validing node's memory. As opposed to the problem being total block chain size.

So my new suggestion is: Set a safe upper limit on the number of transaction outputs per block. Blocks with more outputs would be invalid and rejected by the network.

Advantages: Miners would optimize such that you need to pay a higher fee if you take up more of the unspent outputs in that block. Now, we let economic feedback kick in and we address the problem head on, rather than waiting for it to bite us as bitcoin usage grows and limiting dust transactions is not enough, since it only indirectly solves the problem.

Actually, you could do _both_ - set a safe upper limit on the block size to deal with storage issues and a safe upper limit on unspent outputs per block, too. Then you'd be totally safe.
Post
Topic
Board Bitcoin Discussion
Re: WARNING! Bitcoin will soon block small transaction outputs
by
mollison
on 06/05/2013, 09:22:10 UTC
Why not just decide an acceptable rate of growth for the blockchain per annum (e.g. 10 GB), limit block sizes accordingly, assume all blocks will potentially be completely filled up, and be done with it?

This seems to directly address the fundamental issue (the concern about too much data in the block chain), which we will eventually face anyway if bitcoin is successful.
Post
Topic
Board Development & Technical Discussion
Re: How do I have multiple wallets, with one computer?
by
mollison
on 04/05/2013, 01:22:11 UTC
If you must, the safest way is to run two instances in different directories.

It should be perfectly fine to do what he's describing as long as you completely close down bitcoin-qt between moving around the wallets. That's what I've been told by developers.

Whatever need you think you have for multiple wallets, you are probably wrong, and there is a better way.

monocolor, if you want to describe why you want to do this, someone may be able to suggest a better way to achieve what you're trying to do. However, I can imagine valid reasons for doing what you're doing.

the amount I sent to inactive one I can not see it anymore, even I swapped the wallet file names and reload the qt.

I think that shouldn't happen, but starting bitcoin-qt with --rescan (on Linux; do whatever is equivalent if you're using some other OS) will likely fix it.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 30/04/2013, 21:27:45 UTC
In practice, it comes down to paranoia.  I side with paranoia in theory, but with reality in practice.  As in, I prefer my keys to come from sources as close as possible to actually being genuine entropy sources.  But those suck, so I use RDRAND, EGD, and other sources of high quality pseudo-entropy.  On an offline box, the difference should be negligible.

First, thanks for a very informative post.

Now, I want to veer off topic just slightly.

From my point of view, when generating offline wallets, the entire system you use is the trusted computing base. So I wanted to minimize downloading third-party software besides (in my case) a linux distro and bitcoin-qt. Which is already, in my opinion, a very large and not-that-trusted "trusted" computing base. In any given distro, there are thousands of packages, so thousands of upstream projects, and tens to hundreds of package maintainers.

Shouldn't we be worried about this? If not now, perhaps in the future? Couldn't, say, a governmental entity invest the resources needed to compromise this kind of system? Then, they could introduce a bug similar to the following real one posted on the EGD site, for example:

egd-0.6 had a major security problem that caused it to only use a tiny fraction of the entropy it gathered. All users should upgrade immediately.

Besides messing with key generation, they could also potentially attack Armory (both on the offline and online clients) to pass information between them. Or they could modify cp such that if you're trying to copy one of several offline wallets to a USB drive, all of them are copied covertly (and then exposed by a malicious cp on the online system).

I'm posting this here because it's in the same vein of paranoia as the rest of this discussion, plus I already have the attention of some smart people and the non-attention of trolls, but perhaps a new thread would be preferable if people have much to say on this besides, "you're crazy" or "go take a look at this prior thread elsewhere".
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 30/04/2013, 21:14:18 UTC
You're going to see a read to /dev/urandom on a Linux system one way or another.

Well, yes, and no. I mean, if you do strace -o output vim (for example), you will not see /dev/urandom. So, what the output I observed is telling me is (a) /dev/urandom is being used (though as you say, exactly how it's used is unclear); (b) /dev/random is not being used (since it doesn't appear in the trace). Of course, we pretty much highly suspected all this from looking at the OpenSSL code. Anyway, this will provide an easier test for people in the future.

I honestly have no idea which of those options is more cryptographically secure.  Just seeding the PRNG with /dev/urandom would mean /dev/urandom would be less likely to run out of entropy so that seems like a plus.  But then you're also seeding one PRNG with another PRNG... that "feels" wrong to me... but I, like you, am no crypto expert.  However, what gmaxwell said makes sense.  When /dev/urandom has run out of entropy, the obvious mode of operation would be to use the last truly random bits to seed the PRNG until more entropy is available.  In order for someone to take advantage of this situation, they'd have to either:

1.  Have access to your machine at the exact same time that it has run out of entropy and that you're generating keys, in order to view the seed with which each key was generated.
or
2.  See a large enough sequence of numbers generated from the same seed with which your keys were generated to enable them to calculate the seed.

#1 is terribly unlikely... and if they can view the seed, they probably already have access to your keys Smiley
#2 is equally unlikely.  Unless you're for some reason broadcasting lots of random numbers from /dev/urandom at the same time you're generating keys, the only way they'd see a string of numbers generated from that seed would be to see your private keys.

And just for fun... #3.  Bitcoin keys are generally single-use.  You sign a transaction, then your change is deposited to a new address/key.  What that means is that the keys are not vulnerable to the same type of attacks that long-lived keys might be.  An RSA key used for securing SSL handshakes on a website might be used billions of times, and an attacker can request new data to be encrypted by it any time he wants.  A key that encrypts your harddisk might be used to encrypt terrabytes of data.  A lack of entropy in a key with those types of usages might be vulnerable to some sort of statistical analysis.  A key that gets used once and thrown away (like Bitcoin keys are *supposed* to) just doesn't have the kind of attack surface area that warrants a 100% random guarantee.

Thanks, this is an extremely helpful clarification. Gmaxwell made very similar points in IRC, but it's helpful to see it all laid out in one place. This explains exactly why the warnings in man 4 random about long-lived GPG/SSL/SSH keys do not apply to long-lived Bitcoin keys, which I didn't quite 100% understand as of my last post (otherwise I would have said it).

If you're still wary, I think it's a matter of changing 2 lines of openssl's unix_rand.c (I might have the file name wrong) and openssl will always pick /dev/random first Smiley

I tried that, pretty sure I did it "correctly" (in the sense that I made the obvious changes), and the compile was fine, but there are a bunch of post-compile checks, and while a bunch of them passed just fine, eventually I hit one that did not pass. I think the problem had to do with the test blocking on /dev/random (remember, my machine tends to have very low entropy), and I think the blocking somehow triggered an error - perhaps some kind of timeout. I didn't really investigate. If someone bothers to get it working, hopefully they'll share here in this thread.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 30/04/2013, 04:53:23 UTC
Sorry for my delay in responding. I'm fairly satisfied on this topic, but I'm going to give my final "conclusions" and "findings" for the sake of posterity.

First, there is a simple test to see if bitcoin-qt and openssl are using /dev/urandom or not on a particular machine with pretty high certainty:

Code:
strace -o output bitcoin-qt

On my system (and probably on practically all modern linux desktops), you will find a read of /dev/urandom in that trace, meaning yes, /dev/urandom is being used.

Interestingly enough, man 4 random has some warnings about NOT using /dev/urandom for certain OTHER (non-bitcoin) cryptographic purposes (obviously, the man page predates bitcoin)...

Quote
A read from the /dev/urandom device will not block waiting for  more
entropy.   As  a result,  if  there  is not sufficient entropy in the
entropy pool, the returned values are theoretically vulnerable to a
cryptographic attack on the algorithms used  by  the driver.  Knowledge
of how to do this is not available in the current unclassified lit‐
erature, but it is theoretically possible that such an attack may exist.
If this is a concern in your application, use /dev/random instead.

Also:

Quote
If you are unsure about whether you should use /dev/random or /dev/urandom,
then probably  you  want to use the latter.  As a general rule, /dev/urandom
should be used for everything except long-lived GPG/SSL/SSH keys.

I checked out gnupg for the sake of comparison, and it's using /dev/random, which is in accordance with the above advice.

So, from someone who knows enough about cryptography to know that I don't know anything about cryptography  Grin, all this is troubling.

However, gmaxwell has repeatedly (on multiple occasions) assured me on IRC that he knows enough about cryptography to know that it's just not something we should be worried about. Even after I specifically brought up the above warnings. For example:

Quote
(12:10:30 AM) gmaxwell: Under certain threat models, like the attacker being on
a common multiuser system with you and being able to monitor 99.9% of the
urandom output, then it's potentially interesting.

It would be nice (though probably suboptimal for other reasons) if bitcoin and openssl had opted to take the route that would be obviously safe to people who are not crypto experts, allowing us to avoid this whole conversation altogether, and allowing people like me to not have to think about how much we "trust" the bitcoin and openssl devs on this. Of course, I do trust those people, but I also lock my doors at night, even though I trust that I live in a safe enough place to not need to.

That's not actually a request or complaint; actually relying on /dev/random would (a) almost certainly be an issue to bring up with openssl, not the bitcoin devs; and (b) would have other major downsides.

Anyway, moving on to more practical matters, here is something (below) that other paranoid people like me can actually do about the situation. (Note that simply simlinking /dev/urandom to /dev/random just caused errors for me, and the post-compile checks for openssl failed for me when I tried to change the openssl code  Grin )

I found on my desktop machine, my entropy is often in the low hundreds, which by all accounts is abnormal. I don't know why - perhaps part of it is that I use a very simply window manager, don't have a lot of stuff running, and hardly ever use the mouse. Probably nothing to be worried about, but it's clearly abnormal, so I was a bit worried.

However, when I went to actually generate my offline wallets, I did use the mouse a lot (plus I was using a different distro than normal), and there was plenty of entropy. How do I know? I wrote a program that checks the entropy in a loop and exits with a complaint if it falls below a user-provided threshhold. The program is provided below for anyone who wants it.

Quote
#include
#include
#include


#define DEFAULT_THRESH 2000

int get_thresh(int argc, char** argv) {
   int thresh = DEFAULT_THRESH;
   if (argc == 2) {
      thresh = atoi(argv[1]);
   }
   return thresh;
}


int get_ent() {
   int fd = open("/proc/sys/kernel/random/entropy_avail",O_RDONLY);
   char *buf = malloc(4);
   read(fd, buf, 4);
   close(fd);
   int num = atoi(buf);
   free(buf);
   return num;
}

int main(int argc, char** argv) {

   int thresh = get_thresh(argc, argv);

   int last = get_ent();
   int new = 0;
   while(1) {
      new = get_ent();
      if (new != last) {
         printf("%d\n", new);
         if (new < thresh) {
            printf("INSUFFICIENT ENTROPY\n");
            exit(1);
         }
      }
      last = new;
   }
   return 0;
}
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 20/04/2013, 04:09:34 UTC
But you have other options. If you can access an entropy source and obtain a set of 256 random bits, then you can create your own prov/pub keys (see bitaddress,com) and import them on your wallet (search for pywallet.py)

There are entropy sources over the net, such as random.org and hotbits.com; you can download a lot of random bits from both, hash them and put the hex string in bitaddress.com

Thanks for your feedback, but I'm aware of all that, and it's just not what I'm asking about.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 19/04/2013, 21:30:02 UTC
Your answer will depend on which "Linux live distro" you're using, and on which hardware.  Recent versions of Ubuntu and Fedora will have OpenSSL 1.0.1+.

As of Fedora 18, rngd is started by default.  If it finds a TPM or if the RDRAND and AES-NI* instructions are available on your Ivy Bridge or later CPU, it will use these as entropy sources to feed to the kernel, keeping the entropy pool topped off.  So...  if you're using Fedora 18 on a system with a TPM or Ivy Bridge processor, you probably don't have to worry about it.  Otherwise... seek ye the source code Smiley

If you want more help than that... we need to know which distro you're using so we can look over the specific source without worrying about "that might have changed in a later version, or was changed in a patch by X distro".

I don't have any special or new hardware (so, no TPM or Ivy Bridge or later CPU). I don't want to reveal exactly my whole software setup. Not that I have _that_ many bitcoins, but revealing exactly which version of what software I'm running seems to be a very poor security practice.

Regardless of exactly what is going on below the covers, shouldn't OpenSSL be pulling either from /dev/random or /dev/urandom? If so, what's going on beneath the covers doesn't matter, because /dev/random blocks where there is insufficient entropy, and with /dev/urandom, I can check and see how much entropy there is. That's exactly why those things are there - so that there is a standard way to make sure you have enough entropy, regardless of exactly what you are doing.

So, frankly, if bitcoin (and ultimately OpenSSL) are not using one of those two mechanisms, I would find that puzzling. And I would be curious to find out (a) why not; and (b) what is the standard procedure for someone who is not an actual OpenSSL developer to make sure their applications are getting enough entropy.

I somewhat suspect that either bitcoin or OpenSSL does make sure there is enough entropy, and the right person who can confirm that just hasn't shown up. If it doesn't, that would be a good feature to have (and arguably a bug to not have it). In other words, IMHO, the standard client should guarantee that the addresses it generates are always good addresses and you can't predict the next private key based on knowing other private keys generated around the same time on the same platform (modulo the phenomenally unlikely chance of having a collision). And I bet it does, it's just not been publicly documented yet (that I have found).

For example, deepceleron stated "rand_getbytes returns an error if there is insufficient entropy pool." That is almost good enough for me, but I wasn't able to find that function in either OpenSSL or bitcoin, and even if I did, I personally would like someone to reassure me that that function (or something equivalent) is actually going to be executed on a standard Linux setup.

Anyway, AlphaWolf, thanks very much for taking the time to help me, and hopefully you, deepceleron, or someone else can further enlighten me.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 19/04/2013, 03:19:07 UTC
I suppose I should have posted that rand_getbytes returns an error if there is insufficient entropy pool, so any answer it returns should be as strongly crypto-random as the first.

Thanks. I really appreciate the help. I couldn't find rand_getbytes, grepping through both the bitcoin source and the openssl source, though. Did you misremember the function name, perhaps?

As long as there is some verification (either in bitcoin or whatever part of openssl that bitcoin uses) that there is sufficient entropy before generating the first address in a new wallet, that would definitely put my concerns to rest.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 19/04/2013, 03:16:46 UTC
just look at the openssl code.

I would rather defer to experts than look at crypto code and trust my own shaky assumptions about which code paths are being executed and under what circumstances.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 18/04/2013, 23:03:31 UTC
Everything Bitcoin uses is open source, including Bitcoin itself. So I have no idea why you would want to disassemble the binary. I also think the default seeds that OpenSSL uses are MORE than enough for your needs.

I didn't say anything about disassembly. Please read what I wrote instead of ignoring it and saying ignorant things and cluttering up the thread.

And I didn't ask for your opinion about OpenSSL, I asked for specific information (which you have ignored).
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 18/04/2013, 21:56:00 UTC
Thanks.

I'm having a hard time believing that the answer is that non-straightforward. I mean, probably it uses /dev/urandom except in some weird circumstances that can be ruled out given certain basic assumptions (e.g., standard Linux on x86 without any special-purpose entropy-producing hardware). But yeah, this is just my intuition, I can't actually give evidence for this.

I guess one way to find out (for my particular instance) would be to do some kind of tracing of the actual binary I have to see what files it opens. Assuming it does use /dev/urandom, do you have any idea of how much entropy actually needs to be accumulated before creating another wallet?

And I don't suppose there is any easy way to guarantee some other process doesn't suck up the entropy right before bitcoin uses it?

Honestly, it seems like /dev/random would be better for my purposes, since it'll block until it gets enough entropy. I wonder if I can symlink /dev/urandom to /dev/random or something crazy like that.
Post
Topic
Board Development & Technical Discussion
Re: Entropy during private key generation
by
mollison
on 18/04/2013, 18:34:26 UTC
Nobody has answered my question. Thanks anyway for those who said intelligent things. However, if someone can provide an actual answer, I'd appreciate it.

It's not true that OpenSSL uses /dev/random, or at least, that's a misleading thing to say.

Quote
All OpenSSL versions try to use /dev/urandom by default; starting with version 0.9.7, OpenSSL also tries /dev/random if /dev/urandom is not available. [1]

[1] http://www.openssl.org/support/faq.html

So, again, my question is, can someone who knows about the client code confirm that it's ultimately using /dev/urandom?

If so, is making sure /proc/sys/kernel/random/entropy_avail is a high enough number (and what number is "high enough"?) sufficient?

Personally, I think I know the answers to these things, but I'm not certain, so I wanted to see if someone who knows can back me up. I tried looking at the code before I started this thread, but the answer wasn't obvious, and I'd rather avoid sinking hours into reading the code more carefully.
Post
Topic
Board Development & Technical Discussion
Topic OP
Entropy during private key generation
by
mollison
on 18/04/2013, 05:45:15 UTC
I want to create a bunch of fresh, empty wallets with the standard client. (Why? Having multiple wallets is something I want for security reasons, and this is just a relatively hassle-free way to do it.)

The most convenient way for me to do this is using a Linux live distro, but I'm worried there my not be enough entropy on such a system.

Can I just check /proc/sys/kernel/random/entropy_avail and make sure this number is above 200? (I'm getting this advice from [1]).

In other words, does the client (or the libraries it's using) actually use /dev/urandom, and if so, what is "enough" entropy?

Thanks.

[1] http://major.io/2007/07/01/check-available-entropy-in-linux/