Καιρό ασχολούμαι με την κρυπτογραφία, καθώς τη θεωρώ ενδιαφέρον αντικείμενο. Ωστόσο, μετά από πολύ διάβασμα παρατήρησα πως δεν είναι εύκολο για την χρησιμοποιήσει ο οποιοσδήποτε. Για παράδειγμα κάποιος που θα χρειαστεί PGP κλειδιά κάποια στιγμή στη ζωή του, θα πρέπει πρώτα να μάθει τι είναι αυτό το PGP και μετά να εγκαταστήσει προγράμματα όπως kleopatra τα οποία σε ένα βαθμό θα τον βοηθήσουν. Το πρόβλημα είναι πως δε θα καταλάβει όλα τα βήματα που θα έχει κάνει και τι κάνει το καθένα. Τα advanced δηλαδή πίσω από το πρόγραμμα gpg είναι μόνο για τους πολύ καλά διαβασμένους και όχι για αυτούς που θέλουν να κάνουν απλά τη δουλειά τους.
Ένα δεύτερο πρόβλημα που παρατηρώ είναι ο όγκος των κλειδιών PGP. Τεράστια base64 encoded κείμενα, ναι μεν βοηθούν στο να γίνει η δουλειά, αλλά μόνο αν μεταφερθούν από υπολογιστή σε υπολογιστή. Μια ιδιωτική συζήτηση μπορεί να πραγματοποιηθεί μόνο αν έχουν ανταλλαχθεί κλειδιά online ή μέσω USB.
Αυτά τα δύο προβλήματα έβαλα στόχο να λύσω κι αφού τα κατάφερα, το υλοποίησα σε πρόγραμμα.
Το πρόγραμμα δουλεύει ως εξής (περιληπτικά):
1. Διαλέγει ένα τυχαίο 128 bit entropy. (Ένα νούμερο μεταξύ του 0 και του 2^128)
2. Προσθέτει 4 bits checksum (= 132 bits)
3. «Κόβει» αυτή τη σειρά από 0 και 1 σε 12 κομμάτια με 11 bits το καθένα.
4. Αντιστοιχεί το κάθε κομμάτι στην ανάλογη λέξη του σύμφωνα με ένα wordlist. (2048 λέξεις = 2^11)
Άρα αντί για ένα πελώριο hex έχουμε 12 λεξούλες που μπορούν να γραφούν και σε χαρτί. Δεν θα εξηγήσω πως συνδέονται οι private με τις public λέξεις, διότι έχει περίπλοκα μαθηματικά. Παρόμοιος τρόπος όμως, καταλήγουμε σε ένα 256-bit hex και το μετατρέπουμε σε 24 λέξεις.
Ο καθένας πλέον μπορεί απλά να κρυπτογραφεί τα μηνύματα του «κλειδώνοντας» μόνο κάποιες λέξεις. Εκτός από encrypted messages, το πρόγραμμα διαθέτει και digital signatures.
Υπάρχει και ένα τρίτο πρόβλημα που πιστεύω να λύνει κι αυτό είναι οι τραπεζικές επιταγές εξ αποστάσεως. Αυτός που έχει πρόσβαση στα χρήματα του είναι αυτός που έχει υποβάλει κατά την εγγραφή του στη τράπεζα τις 24 λέξεις του. Μόνο αυτός μπορεί να αποδείξει πως του ανήκουν, άρα μόνο αυτός μπορεί να είναι ο κάτοχος. Δεν είμαι σίγουρος αν αυτό μπορεί να εφαρμοστεί νομικά βέβαια.
Εμφάνιση 1-15 από 27
-
11-12-20, 15:40 Γνώμη για αυτό το πρόγραμμα. #1
-
11-12-20, 23:26 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #2
Γειά σου Yonko
Καλή προσπάθεια, μερικές παρατηρησούλες:
1. 0 εώς 2^128-1
2. Τι σημαίνει <<κλειδώνω>> κάποιες λέξεις;
3. Δεν μπορείς να μην πεις πως συνδέονται το Public + Private λέξεις, είναι όλο το ζουμι! Τα κλειδιά σου είναι πολύ μικρά σε μέγεθος για ασύμμετρη κρυπτογραφία. Θα τα καταλάβουμε τα μαθηματικά, μην αγχώνεσαι. Αν είναι πολλές οι πράξεις απλά πες τι υπολογίζεις. Πρέπει να αποδείξεις οτι ο τρόπος που υπολογίζεις τα δυο κλειδιά είναι ασφαλής για να ναι ασφαλής και η μέθοδος σου. Για παράδειγμα ο RSA ξέρουμε οτι είναι ασφαλής γιατί ο παραγοντισμός σε πρώτους αριθμούς είναι υπερβολικά δύσκολος, αλλα τα κλειδιά πρέπει να ναι αρκετά μεγάλα!
-
12-12-20, 12:36 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #3
Εννοώ μεταξύ. Ούτε 0, ούτε 2^128 αν δεν κάνω λάθος. [1 εώς 2^128-1]. Δεν έχει και πολλή σημασία.
«Κλειδώνοντας» λέξεις εννοώ πως κρυπτογραφείς το όλο message μαζί με τα public words κάποιου άλλου (δηλαδή με το public key του). Ο μόνος τρόπος για να το διαβάσει είναι «ξεκλειδώνοντάς» το με τα private words του.
Ωραία, αυτό είναι και το point. Μικρά σε μέγεθος και ασφαλή.
Δεν χρησιμοποιώ RSA όπως κατάλαβες αλλά την κρυπτογραφία της ελλιπτικής καμπύλης. Δεν μπορώ να ξεκινήσω να εξηγώ πως λειτουργεί αυτό καθώς θα μου φάει 5 σελίδες. Μπορώ να προσπαθήσω πάντως.
Το πρόγραμμα ξεκινάει δημιουργώντας ένα τυχαίο 128-bit hexadecimal. Ας πάρουμε τώρα μια ελλιπτική καμπύλη:
Στην ελλιπτική καμπύλη βάζουμε ένα generator point που είναι πάντα το ίδιο. (για να ξέρουμε που αρχίζουμε)
Το private key είναι τα συνολικά bounces που θα έχει κάνει στη καμπύλη. Πώς κάνει bounces; Έτσι:
Το public key σου είναι οι συντεταγμένες του σημείου που έχεις σταματήσει μετά από όλες αυτές τις «αναπηδήσεις».
Παράδειγμα private key:
Κώδικας:18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725
Κώδικας:0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6
Μάλιστα σύμφωνα με το παράδειγμα καταλήγουμε εδώ:
Κώδικας:0250863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352
Το μόνο που μένει είναι να μετατρέψουμε τα 128-bits private key και public key σε λέξεις για να είναι ευκολότερη η μεταφορά τους, κάτι που κάνει το πρόγραμμά μου.
-
12-12-20, 14:06 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #4
Στην πράξη ισως όχι, αλλα θεωρητικά έχει τεράστια σημασία (πχ για να αποδείξεις ιδιότητες της κρυπτογραφίας σου). Αν έχις ένα αριθμό 128 bit αυτός παίρνει τιμές μεταξύ 0 και 127. Ή με τον ένα τρόπο το κάνεις στο πρόγραμμα σου ή με τον άλλο, ποιος είναι; Δες τον κώδικα!
(Σκέψου οτι κάθε bit διπλασιάζει τον χρόνο που απαιτείται για να «μαντέψεις» το κλειδί)
«Κλειδώνοντας» λέξεις εννοώ πως κρυπτογραφείς το όλο message μαζί με τα public words κάποιου άλλου (δηλαδή με το public key του). Ο μόνος τρόπος για να το διαβάσει είναι «ξεκλειδώνοντάς» το με τα private words του.
Ωραία, αυτό είναι και το point. Μικρά σε μέγεθος και ασφαλή.
Δεν χρησιμοποιώ RSA όπως κατάλαβες αλλά την κρυπτογραφία της ελλιπτικής καμπύλης. Δεν μπορώ να ξεκινήσω να εξηγώ πως λειτουργεί αυτό καθώς θα μου φάει 5 σελίδες. Μπορώ να προσπαθήσω πάντως.
Το μόνο που μένει είναι να μετατρέψουμε τα 128-bits private key και public key σε λέξεις για να είναι ευκολότερη η μεταφορά τους, κάτι που κάνει το πρόγραμμά μου.
(Μπράβο πάντως για τη σκέψη, έχεις βελτιωθεί αισθητά)
-
12-12-20, 14:48 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #5
Ένας αριθμός 128 bit παίρνει τιμές από το 0 μέχρι το 2^128. Γιατί 0 και 127; Π.χ:
Κώδικας:0000000000000000000000000000000000000000000000000000000000000000 = 0 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff = 2^128
Μα αφού γράφω:
Booknemonic uses elliptic curve cryptography to encrypt/decrypt and sign/verify messages. This could be done similarly with a lot of different ways like PGP. The problem was that before you needed to have a very long PGP key to do it. It wasn't possible to write down your key and share it with people at work. You had to transfer the key via computer.
With booknemonic, you can create digital signatures without having to transfer large base64 encoded strings.
Εσύ τι θα προτιμούσες αν έπρεπε να μεταφέρεις ένα χαρτί με το public key πάνω; Να γράψεις 24 λέξεις ή 66 χαρακτήρες hex που υπάρχει πιθανότητα να κάνεις και λάθος;
Εκείνος ο Yonko είναι παρελθόν.
-
12-12-20, 17:14 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #6
Όχι
Κώδικας:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff = 2^128 - 1
Μα αφού γράφω:
Booknemonic uses elliptic curve cryptography to encrypt/decrypt and sign/verify messages. This could be done similarly with a lot of different ways like PGP. The problem was that before you needed to have a very long PGP key to do it. It wasn't possible to write down your key and share it with people at work. You had to transfer the key via computer.
With booknemonic, you can create digital signatures without having to transfer large base64 encoded strings.
Εσύ τι θα προτιμούσες αν έπρεπε να μεταφέρεις ένα χαρτί με το public key πάνω; Να γράψεις 24 λέξεις ή 66 χαρακτήρες hex που υπάρχει πιθανότητα να κάνεις και λάθος;
(Δεν κατακρίνω το πρόγραμμα σου, εποικοδομητική κριτική θέλω να κάνω. Το να εκφράζεις σωστά την σκέψη σου - συμπεριλαμβανομένου του motivation και του προβλήματος που λύνεις - στον προγραμματισμό είναι πολύ σημαντικό)Τελευταία επεξεργασία από το μέλος Eruyome(MMXGN) : 12-12-20 στις 17:33.
-
12-12-20, 17:31 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #7
Οι 2048 λέξεις που έχω διαλέξει, θεωρώ πως είναι αρκετά μικρές και ξεχωρίζουν μεταξύ τους. Ορίστε όλες: https://pastebin.com/raw/Yikznbge.
Μα σοβαρά το συζητάμε αυτό; Δηλαδή το advance concert visit awesome neglect fire dizzy club deny danger disease sign rebel donkey tone educate dumb desert mosquito happy crane jungle grit near είναι δυσκολότερο να διαβαστεί/αποστηθιστεί από κάτι τέτοιο: 0250863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352;
Δεν είπα πως μπορείς να το θυμάσαι, διότι 24 λέξεις με τη σειρά είναι πολύ δύσκολο, αλλά πολύ δυσκολότερο να θυμάσαι ολόκληρο hex. Αυτό που είπα είναι πως δεν μπορείς να κάνεις εύκολα λάθος με τις λέξεις.
Και να το δείξω και στην πράξη:
Μήνυμα:
Κώδικας:Είμαι ο red yonko, και υπογράφω αυτό το μήνυμα. (12/12/2020)
Κώδικας:advance concert visit awesome neglect fire dizzy club deny danger disease sign rebel donkey tone educate dumb desert mosquito happy crane jungle grit near H0oupn9x7Pwo9gRm7KobvXZ5D3zVKxcS4lPkMrAM5Bh2PpzxhEjbqEQRQjGMIA6kshHxah8HYkBsIkLvqhMCxUs=
-
12-12-20, 17:37 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #8
-
12-12-20, 17:50 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #9
Μα σοβαρά το συζητάμε αυτό; Δηλαδή το advance concert visit awesome neglect fire dizzy club deny danger disease sign rebel donkey tone educate dumb desert mosquito happy crane jungle grit near είναι δυσκολότερο να διαβαστεί/αποστηθιστεί από κάτι τέτοιο: 0250863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B2352;Δεν είπα πως μπορείς να το θυμάσαι, διότι 24 λέξεις με τη σειρά είναι πολύ δύσκολο, αλλά πολύ δυσκολότερο να θυμάσαι ολόκληρο hex. Αυτό που είπα είναι πως δεν μπορείς να κάνεις εύκολα λάθος με τις λέξεις.
Και να το δείξω και στην πράξη:
Μήνυμα:
Κώδικας:Είμαι ο red yonko, και υπογράφω αυτό το μήνυμα. (12/12/2020)
Κώδικας:advance concert visit awesome neglect fire dizzy club deny danger disease sign rebel donkey tone educate dumb desert mosquito happy crane jungle grit near H0oupn9x7Pwo9gRm7KobvXZ5D3zVKxcS4lPkMrAM5Bh2PpzxhEjbqEQRQjGMIA6kshHxah8HYkBsIkLvqhMCxUs=
Κώδικας:0250 863A D64A 87AE 8A2F E83C 1AF1 A840 3CB5 3F53 E486 D851 1DAD 8A04 887E 5B23 52
Κώδικας:advance concert visit awesome neglect fire dizzy club deny danger disease sign rebel donkey tone educate dumb desert mosquito happy crane jungle grit near
Δεν υπάρχει "πιστεύω πως", "θεωρώ" ούτε "είναι προφανές" οταν προσπαθείς να στηρίξεις κάτι, πρέπει να μπορείς να το επαληθεύσεις αντικειμενικα.
- - - Updated - - -
Ήταν λάθος δικό μου αυτό, έγραψα θυμάται ενώ εννοούσα σημειώσει. Το διόρθωσα αλλα δεν πρόλαβε να μπεί στο quote.
-
12-12-20, 17:51 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #10
-
12-12-20, 17:53 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #11
-
12-12-20, 17:53 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #12
Ωραία θα σου πω δύο λόγους για να το επαληθεύσω και αντικειμενικά. Πρώτον, το hex θα πρέπει να το κοιτάς κάθε 3-4 χαρακτήρες για να δεις τι πρέπει να γράψεις μετά και λογικό γιατί θα φοβάσαι μη σου διαφύγει κανένας αριθμός/γράμμα. Ενώ με λέξεις ρίχνεις μια ματιά και λες "advance concert visit", το γράφεις πας στις επόμενες 3. Δεν χρειάζεται να κοιτάς τον υπολογιστή κάθε λίγο και λιγάκι. Δεύτερον, μπορεί να δουλέψει πιο γρήγορα στον προφορικό λόγο. Άλλο να μου πεις 24 λέξεις και άλλο 66 hexadecimals ψηφία ένα ένα το καθένα.
-
12-12-20, 18:18 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #13
Aυτό που λες είναι καθαρά υποκειμενικό όμως και αφορά τον καθένα προσωπικά (εμένα πχ με βολεύουν hex των 4ων χαρακτήρων παρά ομάδες των 3 λέξεων). Επίσης με τις λέξεις, αν δεν ξέρει απο πριν ο χρήστης το λεξικό μπορεί να κάνει λάθη, πχ τι γίνεται αν αντί advance μπερδευτείς και γράψεις advanced, ή concert concept (πολύ συχνό πχ όταν μιλάς στο τηλέφωνο); Προφανώς το πρόγραμμα σου δεν θα το δεχθεί σαν έγκυρο και θα πρέπει να το τσεκάρεις μία-μια. Αν ήθελες οπωσδήποτε να το δείξεις αντικειμενικά, θα μπορούσες να εφαρμόσεις κάποιο τεστ (πχ να κάνεις μια μικρή έρευνα βρίσκοντας αν υπάρχει, ή βάζοντας τις δυο μεθόδους σε μια ομάδα ανθρώπων και να δειχνες - ή όχι - οτι ο τρόπος σου οδηγέί σε λιγότερα λάθη κατα την αντιγραφή).
Κάτι άλλο που αφορά το προγραμματιστικό κομμάτι: Βλέπω το έβαλες opensource. Βάλε οπωσδήποτε μια άδεια! (ανβαριέσαι βάλε την MIT που είναι η πιο free) για να ξέρει πως μπορεί κάποιος να χρησιμοποιήσει τον κώδικα σου. Έπειτα: σχόλια στον κώδικα σου! Και βάλε και στο README οδηγίες για το χτήσιμο του.
-
12-12-20, 18:34 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #14
Δεκτό. Καλό θα ήταν να βάλω στο πρόγραμμα και επιλογή να σου μετατρέπει τις λέξεις σου σε hex όπως και να κάνεις τα πάντα με hex αντί για λέξεις. Για αυτούς που τους βολεύει έτσι, αν και δεν νομίζω να είναι πολλοί. Μια τέτοια ρύθμιση όμως δεν κάνει ποτέ κακό.
Γενικά το πρόγραμμα δεν έχει τελειώσει. Όταν θα φτάσεις στο σημείο να γράψεις μια λέξη θα σου βγάζει λέξεις που είναι διαθέσιμες. Για παράδειγμα:
Έχω διαλέξει GNU General Public License. Μου φάνηκε πιο «ελεύθερη» απ'ότι η MIT. Σχόλια και README μόλις τελειώσω τα από πάνω.
-
13-12-20, 13:02 Απάντηση: Γνώμη για αυτό το πρόγραμμα. #15
Καλή λύση
Έχω διαλέξει GNU General Public License. Μου φάνηκε πιο «ελεύθερη» απ'ότι η MIT. Σχόλια και README μόλις τελειώσω τα από πάνω.
Bookmarks