On 04/11/2013 04:56:54 PM, Ed Sutter wrote:
Hi,
I managed to get dropbear-ssh running under a uC/OS-II thread.
Obviously had to do a lot of hacking to make this work, and
I'm sure its not the most efficient way of doing it.

Not being an ssh/cryptography wizard by any stretch of the
imagination, I have two questions that may be trivial...

1..
Because I'm not on a Unix-ish system, I don't have any of
the /proc stuff or /dev/urandom for seedrandom().  Is it
essential that this function have *that* much random
input?  How does this affect the security of the connection?

If you can predict the random seed, you can decrypt the entire connection. All the other cryptography is based on exchanging unguessable numbers in both directions.

Public key cryptography does a one-way mathematical trick on a really big number to split it into two smaller numbers, so that each one is the antidote to the other's poison. You scramble a message with one, you need the OTHER to unscramble it. (You can't undo it with the one that created it, that's the clever bit.)

You keep one of this pair of numbers secret (doesn't matter which, they're symmetrical) as your private key and give the other out as your public key. Anybody can use your public key to send you a message which only you can read with your private key. And anyone can read messages you send with your private key but only you could have sent them. So in one direction it provides authentication, in the other it provides privacy.

When you want a bidirectional connection providing both, each side produces a pair of of keys (four keys total), then exchanges one and keeps the other. Then you encrypt each packet TWICE, with your private key and with the other guy's public key. At the other end they decrypt with your public key (so the message could only have been created with your private key, so it came from you) and their own private key (so only they can read it). Doesn't matter what order the two encryption/decryptions occur in as long as both sides agree.

Public key cryptography is really computationally expensive (I.E. slow) so what they do is exchange symmetrical keys with it, which are another unguessable secret number that's much faster to use, but which requires both sides to know the _same_ unguessable secret. (The poison is its own antidote, the key that encrypted is also the key that undoes it. Simpler/faster math that way, but it means you need an established relationship to use it.)

The rest of the connection is then encrypted with the symmetric keys. (Well, it generates and exchanges fresh symmetric keys every once in a while so that listeners won't have TOO much of the same kind of data to try various clever attacks with to guess that key.) The public key cryptography is just used to establish and verify the connection at the start.

2..
I essentially hard-coded the -r option (ssh server) to use a
pre-established rsa_host_key file.  Should this file be built
once for a given system, and then reused or is this something
that should be recreated each time the server is started?

The host key uniquely identifies the host. It's what gives you the "host key has changed!" warning when somebody reinstalls the server.

Otherwise, anybody could intercept the connection, insert their own ssh server, have you log into it, forward the credentials use use to the other server to log into that, and pass data through in both directions while logging all of it. This is called a "man in the middle" attack, and you prevent it by giving each server a unique way to identify itself that only itknows. (Basically you encrypt a packet at it using its public key, and it decrypts it using its private key and sends back the correct response based on its contents.)

And that's cryptography 101. :)

Rob

Reply via email to