Το προφίλ μας στο Google Plus
0

Kali Linux: Repos που απουσιάζουν και χαμηλή εντροπία

Με αφορμή το αφιέρωμά μας στην κρυπτογράφηση αρχείων και email, επιμελής αναγνώστης του περιοδικού θέλησε, από τo περιβάλλον του Kali Linux, να εφαρμόσει όλα όσα είδε στα σχετικά video tutorials. Πολύ γρήγορα όμως σκόνταψε σε δύο προβλήματα, το ένα εκ των οποίων άνετα θα χαρακτηρίζαμε ως showstopper. Είχε την ευγενή καλοσύνη να μας ενημερώσει και, αφού είδαμε κι εμείς τα προβλήματα, βρήκαμε λύσεις.

Το προαναφερθέν αφιέρωμα αποτελείται από δύο εκτενή video tutorials στα οποία παρουσιάζεται η λογική της κρυπτογραφίας δημοσίου κλειδιού, το εργαλείο GnuPG, καθώς και η χρήση του για την κρυπτογράφηση αρχείων και email. Για τις επιδείξεις μας, στα video δουλεύουμε σε περιβάλλοντα openSUSE και Windows 10 RC και, ειδικά για την κρυπτογράφηση email, στρεφόμαστε στο συνδυασμό Thunderbird & Enigmail.

Ο αναγνώστης μας όμως δεν κατάφερε να φτάσει τόσο μακριά, αφού μέσα από το Kali Linux δεν μπόρεσε καν να δημιουργήσει ένα ζεύγος ιδιωτικού-δημοσίου κλειδιού. Αναλυτικότερα, δύο ήταν τα προβλήματα που ανακάλυψε:

  • δεν μπορούσε να εγκαταστήσει τη νεότερη έκδοση, της σειράς 2.x, του GnuPG, παίρνοντας μηνύματα λάθους περί ανικανοποίητων dependencies
  • ακόμη και με το “παλιό” GnuPG, της σειράς 1.x, δεν μπορούσε να δημιουργήσει ένα ζεύγος ιδιωτικού-δημοσίου κλειδιού λόγω χαμηλής εντροπίας

Καταλαβαίνετε, λοιπόν, ότι ο αναγνώστης μας όχι μόνο δεν έφτασε μακριά, ούτε καν να ξεκινήσει μπόρεσε.

Η αναπαραγωγή…
Έτυχε να έχουμε έτοιμο ένα VM με Kali Linux, οπότε το ξεκινήσαμε με την ελπίδα ότι θα μπορούσαμε να αναπαράγουμε τα προβλήματα, επομένως να βρούμε και πιθανές λύσεις. Μια ανησυχία που είχαμε ήταν ότι σε εμάς θα δούλευαν όλα αναμενόμενα, οπότε σ’ αυτή την περίπτωση θα έπρεπε ν’ αρχίσουμε να μαντεύουμε τι μπορεί να μην πηγαίνει καλά με το σύστημα του φίλου μας. Πολύ γρήγορα είδαμε ότι αυτή η ανησυχία ήταν αβάσιμη :P

Αρχικά προσπαθήσαμε να εγκαταστήσουμε το πακέτο gnupg2, όμως υπήρχε πρόβλημα με τα πακέτα gnupg-agent και libassuan0. Υπόψη ότι το πρόβλημα δεν λύθηκε φρεσκάροντας τα repositories του Kali (με apt-get update).

Εξαιτίας δύο πακέτων που χρειάζονται αλλά δεν πρόκειται να εγκατεστηθούν(!), η εγκατάσταση του gnupg2 είναι αδύνατον να γίνει :/

Δοκιμάσαμε στη συνέχεια να δημιουργήσουμε ένα ζεύγος κλειδιών με το ήδη εγκατεστημένο gnupg. Ούτε αυτό πέτυχε, αφού η γεννήτρια τυχαίων αριθμών δεν είχε την απαραίτητη εντροπία. Σημειώστε ότι η εντροπία παρέμενε χαμηλή ακόμη κι όταν βάλαμε το δίσκο να δουλεύει και ταυτόχρονα κουνούσαμε το ποντίκι τυχαία.

Η γεννήτρια τυχαίων αριθμών δεν έχει την απαιτούμενη εντροπία κι ως αποτέλεσμα η παραγωγή των κλειδιών δεν προχωρά.

Μετά από σύντομη έρευνα βρήκαμε τους υπαίτιους για τα δύο αυτά προβλήματα.

…και οι λύσεις
Σε αρκετές περιπτώσεις, αμέσως μετά την εγκατάσταση του Kali η λίστα με τα repositories στο αρχείο /etc/apt/sources.list είναι ελλειπής. Στη δική μας περίπτωση περιείχε δύο γραμμές:

deb http://security.kali.org/ kali/updates main contrib non-free
deb-src http://security.kali.org/ kali/updates main contrib non-free

Τις “σχολιάσαμε” (comment-out) και προσθέσαμε τις ακόλουθες τέσσερεις:

deb http://http.kali.org/kali kali main contrib non-free
deb-src http://http.kali.org/kali kali main contrib non-free

deb http://security.kali.org/kali-security kali/updates main contrib non-free
deb-src http://security.kali.org/kali-security kali/updates main contrib non-free

Αυτό ήταν αρκετό για να εξαλειφθούν τα προβλήματα εγκατάστασης. Πράγματι, αφού ενημερώσαμε την τοπική λίστα με τα πακέτα των repositories

root@kalivm:~# apt-get update
Get:1 http://security.kali.org kali/updates Release.gpg [819 B]       
Get:2 http://http.kali.org kali Release.gpg [819 B]
...
Get:15 http://security.kali.org kali/updates/non-free amd64 Packages [20 B]                                  
Get:16 http://http.kali.org kali/non-free amd64 Packages [169 kB]                                            
Fetched 19.5 MB in 15s (1241 kB/s)                                                                           
Reading package lists... Done
root@kalivm:~#

στη συνέχεια εγκαταστήσαμε το gnupg2 χωρίς κανένα πρόβλημα απολύτως:

root@kalivm:~# apt-get install gnupg2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gnupg-agent libassuan0 pinentry-gtk2
Suggested packages:
  gnupg-doc xloadimage pinentry-doc
The following NEW packages will be installed:
  gnupg-agent gnupg2 libassuan0 pinentry-gtk2
0 upgraded, 4 newly installed, 0 to remove and 6 not upgraded.
Need to get 2860 kB of archives.
After this operation, 7044 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://http.kali.org/kali/ kali/main libassuan0 amd64 2.0.3-1 [35.6 kB]
Get:2 http://http.kali.org/kali/ kali/main pinentry-gtk2 amd64 0.8.1-1 [75.2 kB]
Get:3 http://http.kali.org/kali/ kali/main gnupg-agent amd64 2.0.19-2+deb7u2 [465 kB]
Get:4 http://http.kali.org/kali/ kali/main gnupg2 amd64 2.0.19-2+deb7u2 [2284 kB]
Fetched 2860 kB in 3s (851 kB/s)  
Selecting previously unselected package libassuan0:amd64.
(Reading database ... 324532 files and directories currently installed.)
Unpacking libassuan0:amd64 (from .../libassuan0_2.0.3-1_amd64.deb) ...
Selecting previously unselected package pinentry-gtk2.
Unpacking pinentry-gtk2 (from .../pinentry-gtk2_0.8.1-1_amd64.deb) ...
Selecting previously unselected package gnupg-agent.
Unpacking gnupg-agent (from .../gnupg-agent_2.0.19-2+deb7u2_amd64.deb) ...
Selecting previously unselected package gnupg2.
Unpacking gnupg2 (from .../gnupg2_2.0.19-2+deb7u2_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Setting up libassuan0:amd64 (2.0.3-1) ...
Setting up pinentry-gtk2 (0.8.1-1) ...
Setting up gnupg-agent (2.0.19-2+deb7u2) ...
Setting up gnupg2 (2.0.19-2+deb7u2) ...
root@kalivm:~#

Μολαταύτα, το ζήτημα με τη χαμηλή εντροπία παρέμενε:

root@kalivm:~# gpg2 --gen-key 
gpg (GnuPG) 2.0.19; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Chris Vee 
Email address: chris.vee@colder.is
Comment: Northern Outpost
You selected this USER-ID:
    "Chris Vee (Northern Outpost) <chris.vee@colder.is>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Η λύση είναι να εγκαταστήσουμε την υπηρεσία ονόματι haveged, η οποία βασίζεται στον αλγόριθμο HAVEGE (HArdware Volatile Entropy Gathering and Expansion) προκειμένου να διατηρεί ένα pool τυχαίων bytes μεγέθους 1 megabyte. Κάθε φορά που η παροχή τυχαίων bits στο /dev/random είναι χαμηλή (συμβαίνει σε VMs, VPSes και headless servers), τότε η τροφοδοσία παρέχεται από το pool του haveged.

Η εγκατάσταση της υπηρεσίας γίνεται πληκτρολογώντας

root@kalivm:~# apt-get install haveged
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  haveged
0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 29.5 kB of archives.
After this operation, 105 kB of additional disk space will be used.
Get:1 http://http.kali.org/kali/ kali/main haveged amd64 1.4-4 [29.5 kB]
Fetched 29.5 kB in 1s (27.8 kB/s)
Selecting previously unselected package haveged.
(Reading database ... 324666 files and directories currently installed.)
Unpacking haveged (from .../haveged_1.4-4_amd64.deb) ...
Processing triggers for man-db ...
Setting up haveged (1.4-4) ...
update-rc.d: We have no instructions for the haveged init script.
update-rc.d: It looks like a non-network service, we enable it.
root@kalivm:~#

Όπως εύκολα διαπιστώνουμε, η υπηρεσία ενεργοποιείται αυτόματα αμέσως μετά την εγκατάστασή της:

root@kalivm:~# service haveged status
[ ok ] haveged is running.
root@kalivm:~#

Ας προσπαθήσουμε τώρα ξανά να παραγάγουμε ένα ζεύγος κλειδιών με το gpg2:

root@kalivm:~# gpg2 --gen-key 
gpg (GnuPG) 2.0.19; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Chris Vee
Email address: chris.vee@colder.is
Comment: Northern Outpost
You selected this USER-ID:
    "Chris Vee (Northern Outpost) <chris.vee@colder.is>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key E197673C marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/E197673C 2015-07-19
      Key fingerprint = 31F2 7BEA 662F C467 5FBC  4192 74F7 2E60 E197 673C
uid                  Chris Vee (Northern Outpost) <chris.vee@colder.is>
sub   2048R/314AA806 2015-07-19

root@kalivm:~#

Όλα καλά — η Πλάση είναι όμορφη και πάλι.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων