Vladislav Grishenko d3d0d60076 Add Chacha20-Poly1305, AES128-GCM and AES256-GCM support (#93)
* Add Chacha20-Poly1305 authenticated encryption

* Add general AEAD approach.
* Add chacha20-poly1305@openssh.com algo using LibTomCrypt chacha and
  poly1305 routines.

Chacha20-Poly1305 is generally faster than AES256 on CPU w/o dedicated
AES instructions, having the same key size.
Compiling in will add ~5,5kB to binary size on x86-64.

function                                             old     new   delta
chacha_crypt                                           -    1397   +1397
_poly1305_block                                        -     608    +608
poly1305_done                                          -     595    +595
dropbear_chachapoly_crypt                              -     457    +457
.rodata                                            26976   27392    +416
poly1305_process                                       -     290    +290
poly1305_init                                          -     221    +221
chacha_setup                                           -     218    +218
encrypt_packet                                      1068    1270    +202
dropbear_chachapoly_getlength                          -     147    +147
decrypt_packet                                       756     897    +141
chacha_ivctr64                                         -     137    +137
read_packet                                          543     637     +94
dropbear_chachapoly_start                              -      94     +94
read_kex_algos                                       792     880     +88
chacha_keystream                                       -      69     +69
dropbear_mode_chachapoly                               -      48     +48
sshciphers                                           280     320     +40
dropbear_mode_none                                    24      48     +24
dropbear_mode_ctr                                     24      48     +24
dropbear_mode_cbc                                     24      48     +24
dropbear_chachapoly_mac                                -      24     +24
dropbear_chachapoly                                    -      24     +24
gen_new_keys                                         848     854      +6
------------------------------------------------------------------------------
(add/remove: 14/0 grow/shrink: 10/0 up/down: 5388/0)         Total: 5388 bytes

* Add AES128-GCM and AES256-GCM authenticated encryption

* Add general AES-GCM mode.
* Add aes128-gcm@openssh.com and aes256-gcm@openssh.com algo using
  LibTomCrypt gcm routines.

AES-GCM is combination of AES CTR mode and GHASH, slower than AES-CTR on
CPU w/o dedicated AES/GHASH instructions therefore disabled by default.
Compiling in will add ~6kB to binary size on x86-64.

function                                             old     new   delta
gcm_process                                            -    1060   +1060
.rodata                                            26976   27808    +832
gcm_gf_mult                                            -     820    +820
gcm_add_aad                                            -     660    +660
gcm_shift_table                                        -     512    +512
gcm_done                                               -     471    +471
gcm_add_iv                                             -     384    +384
gcm_init                                               -     347    +347
dropbear_gcm_crypt                                     -     309    +309
encrypt_packet                                      1068    1270    +202
decrypt_packet                                       756     897    +141
gcm_reset                                              -     118    +118
read_packet                                          543     637     +94
read_kex_algos                                       792     880     +88
sshciphers                                           280     360     +80
gcm_mult_h                                             -      80     +80
dropbear_gcm_start                                     -      62     +62
dropbear_mode_gcm                                      -      48     +48
dropbear_mode_none                                    24      48     +24
dropbear_mode_ctr                                     24      48     +24
dropbear_mode_cbc                                     24      48     +24
dropbear_ghash                                         -      24     +24
dropbear_gcm_getlength                                 -      24     +24
gen_new_keys                                         848     854      +6
------------------------------------------------------------------------------
(add/remove: 14/0 grow/shrink: 10/0 up/down: 6434/0)         Total: 6434 bytes
2020-05-25 23:50:25 +08:00
2019-03-27 21:47:34 +08:00
2017-05-13 22:50:54 +08:00
2020-03-12 00:09:45 +08:00
2016-11-15 14:56:25 +01:00
2016-11-15 14:56:25 +01:00
2019-03-20 23:47:25 +08:00
2018-02-17 19:29:51 +08:00
2019-03-27 21:47:34 +08:00
2020-03-12 00:09:45 +08:00
2019-03-21 00:21:38 +08:00
2019-05-15 21:59:45 +08:00
2016-03-16 22:41:20 +08:00
2016-03-16 22:41:20 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2018-03-01 23:46:24 +08:00
2018-02-17 19:29:51 +08:00
2016-03-18 20:43:22 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2018-02-17 19:29:51 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2018-03-05 11:50:31 +08:00
2018-03-09 23:16:37 +08:00
2018-03-09 23:16:37 +08:00
2020-03-12 00:09:45 +08:00
2018-01-23 23:05:47 +08:00
2018-03-06 22:18:20 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2019-05-15 21:59:45 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2016-03-16 22:41:20 +08:00
2018-02-17 12:16:18 +08:00
2016-03-15 22:04:13 +08:00
2019-03-20 23:05:37 +08:00
2018-01-26 00:28:25 +08:00
2020-05-25 21:02:59 +08:00
2019-05-15 21:59:45 +08:00
2020-03-12 00:09:45 +08:00
2019-03-23 21:45:00 +08:00
2018-02-17 19:41:44 +08:00
2019-05-15 21:59:45 +08:00
2019-03-20 22:09:19 +08:00
2019-03-20 22:25:15 +08:00
2016-03-16 22:41:20 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2005-01-02 17:08:27 +00:00
2020-03-12 00:09:45 +08:00
2019-03-21 00:09:07 +08:00
2019-05-15 21:59:45 +08:00
2020-03-12 00:09:45 +08:00
2020-03-12 00:09:45 +08:00
2018-02-26 21:31:15 +08:00
2019-01-07 23:09:45 +08:00
2018-09-07 23:02:20 +08:00
2018-09-07 23:02:20 +08:00

This is Dropbear, a smallish SSH server and client.
https://matt.ucc.asn.au/dropbear/dropbear.html

INSTALL has compilation instructions.

MULTI has instructions on making a multi-purpose binary (ie a single binary
which performs multiple tasks, to save disk space)

SMALL has some tips on creating small binaries.

Please contact me if you have any questions/bugs found/features/ideas/comments etc :)
There is also a mailing list http://lists.ucc.gu.uwa.edu.au/mailman/listinfo/dropbear

Matt Johnston
matt@ucc.asn.au


In the absence of detailed documentation, some notes follow:
============================================================================

Server public key auth:

You can use ~/.ssh/authorized_keys in the same way as with OpenSSH, just put
the key entries in that file. They should be of the form:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwVa6M6cGVmUcLl2cFzkxEoJd06Ub4bVDsYrWvXhvUV+ZAM9uGuewZBDoAqNKJxoIn0Hyd0Nk/yU99UVv6NWV/5YSHtnf35LKds56j7cuzoQpFIdjNwdxAN0PCET/MG8qyskG/2IE2DPNIaJ3Wy+Ws4IZEgdJgPlTYUBWWtCWOGc= someone@hostname

You must make sure that ~/.ssh, and the key file, are only writable by the
user. Beware of editors that split the key into multiple lines.

Dropbear supports some options for authorized_keys entries, see the manpage.

============================================================================

Client public key auth:

Dropbear can do public key auth as a client, but you will have to convert
OpenSSH style keys to Dropbear format, or use dropbearkey to create them.

If you have an OpenSSH-style private key ~/.ssh/id_rsa, you need to do:

dropbearconvert openssh dropbear ~/.ssh/id_rsa  ~/.ssh/id_rsa.db
dbclient -i ~/.ssh/id_rsa.db <hostname>

Dropbear does not support encrypted hostkeys though can connect to ssh-agent.

============================================================================

If you want to get the public-key portion of a Dropbear private key, look at
dropbearkey's '-y' option.

============================================================================

To run the server, you need to generate server keys, this is one-off:
./dropbearkey -t rsa -f dropbear_rsa_host_key
./dropbearkey -t dss -f dropbear_dss_host_key
./dropbearkey -t ecdsa -f dropbear_ecdsa_host_key
./dropbearkey -t ed25519 -f dropbear_ed25519_host_key

or alternatively convert OpenSSH keys to Dropbear:
./dropbearconvert openssh dropbear /etc/ssh/ssh_host_dsa_key dropbear_dss_host_key

You can also get Dropbear to create keys when the first connection is made -
this is preferable to generating keys when the system boots. Make sure 
/etc/dropbear/ exists and then pass '-R' to the dropbear server.

============================================================================

If the server is run as non-root, you most likely won't be able to allocate a
pty, and you cannot login as any user other than that running the daemon
(obviously). Shadow passwords will also be unusable as non-root.

============================================================================

The Dropbear distribution includes a standalone version of OpenSSH's scp
program. You can compile it with "make scp", you may want to change the path
of the ssh binary, specified by _PATH_SSH_PROGRAM in options.h . By default
the progress meter isn't compiled in to save space, you can enable it by 
adding 'SCPPROGRESS=1' to the make commandline.
Description
No description provided
Readme 14 MiB
Languages
C 90.8%
TeX 5.7%
Makefile 1.1%
Perl 0.5%
Python 0.5%
Other 1.4%