Ντετερμινιστική δημιουργία κωδικών

Η ιδέα είναι απλή, από ένα κοινό κεντρικό κωδικό και το όνομα ενός site παράγουμε ένα κωδικό για το site αυτό. Ακόμα και αν ο αλγόριθμός είναι γνωστός, ακόμα και αν ξέρουμε τους κωδικούς για κάποιο site, δεν μπορούμε να μαντέψουμε τον κεντρικό κωδικό.

Απο τον κεντρικό κωδικό και το όνομα του site δείχνει τον κωδικό site στο τερματικό και τον βάζει και στον clipboard. Το πλεονέκτημα του είναι πως δεν υπάρχουν πουθενά αποθηκευμένοι κωδικοί, μόνο ο κεντρικός κωδικός στο μυαλό μας.

Ο κώδικας είναι εύκολος και αρκεί να θυμόμαστε μόνο τον αλγόριθμο για να τον ξαναφτιάξουμε (Ή να τον έχουμε κάπου αποθηκευμένο, αν δεν ξέρουμε να φτιάχνουμε scripts :smiley:)

#!/bin/bash
read -s -p "Enter master password: " secret
genpass=$(echo $1:$secret | sha512sum | base64 -w0 | head -c ${2:-32})
echo ${genpass} | xclip
echo
echo "Password for '$1' is: ${genpass}"
echo
unset secret genpass

Αποθηκεύουμε το αρχείο σε φάκελο που υπάρχει στο path, με όνομα mpassgen ή όποιο άλλο θέλουμε και το κάνουμε εκτελέσιμο κατά τα γνωστά.

Για παράδειγμα με τον εξαιρετικά δύσκολο κεντρικό κωδικό lala έχουμε

$ mpassgen www.google.com
Enter master password: 
Password for 'www.google.com' is: NTMzZTE2ZGZlYjlhYTBiNGE0NzA2MmVk

$ mpassgen www.linux-user.gr 
Enter master password:  
Password for 'www.linux-user.gr' is: MzRmMzMzNTFkNjFmYmI0MzMwYWFjZmY1

Αν θέλετε μικρότερους η μεγαλύτερους κωδικούς ζητήστε το μετά το όνομα του site (πχ mpassgen google 9).

5 Likes

ωραιο το script , αλλά σε εμενα δεν βαζει τον κωδικο που δημιουργειται στο clipboard (εχω εγκατεστημενο το xclip, για clipboard εχω το clipit)
επισης τι ειναι αυτο το mpassgen , αυτο απο που προκυπτει;

Το όνομα το είναι όπως θέλεις να ονομάσεις την εντολή. Δεν έχει κάποια σημασία.

Υπάρχουν διάφορα clipboards. Χωρίς όρισμα το βάζει στην περιοχή που το παίρνεις με μεσαίο κλικ. Αν θέλεις τον άλλο xclip -selection clipboard

Για τους διάφορους clipboard (το Linux έχει πολλούς) δες

1 Like

ωραια, τωρα διευκρινίστηκαν τα παντα ολα :+1:
το υιοθετω το script, θα φτιαξω και launcher στο δευτερο πανελακι που εχω καθοτι βολικο θενξ

Πολύ φοβάμαι πως δεν είναι φτιαγμένο να λειτουργεί με αυτό τον τρόπο. Θέλει ένα τερματικό (κάτι που μπορεί να λυθεί εύκολα με κάτι σαν gnome-terminal -e ..., αλλά θέλεις ένα τρόπο να περνάς και το site για το οποίο σε ενδιαφέρει ο κωδικός.

Βέβαια είναι “στοιχειώδες” να τροποποιήσεις το πρόγραμμα και να του βάλεις ένα γραφικό περιβάλλον, και να το φτιάξει όπως ακριβώς σου αρέσει, αλλά θα το αφήσω σαν άσκηση :smiley:

ναι εχεις δικιο για αυτο απο οτι βλεπω

οσο για το

αυτο ειναι ευκολο στο xfce

οσον αφορα την ασκηση, δηλαδη να αλλάξω το σκριπτακι, δε νομιζω να τα καταφερω, δεν εχω ιδεα πως μπορει να γινει να ζηταει και το site, ειμαι ασχετος με το σκριπτιγκ

Αυτη εδω η εκδοση δουλευει σε γραφικο περιβαλλον αλλα θελει το zenity για να δουλεψει

Αφου γινει εγκατασταση το zenity ανοιγεις ενα αρχειο με καταληξη .sh πχ mgenpass-gui.sh
το κανεις εκτελεσιμο με chmod +x mgenpass-gui.sh

κανεις copy/paste τα παρακατω στο εν λογω αρχειο

#!/bin/bash
# Εισαγωγη κεντρικου κωδικου  για την δημιουργια ντετερμινιστικου κωδικου
secret=$(zenity --title="mGenPass GUI" --text="Enter Master Password:" --password)

# Εαν πατηθει το Cancel ή το password ειναι κενο βγαλε ενα απλο μυνηματακι και σταματα την εκτελεση του προγραμματος
    if [[ $? -eq 1 ]]; then
       zenity --title="mGenPass GUI" --text="Script is cancelled. GoodBye!" --info
       exit 1
    fi

# Εισαγωγη ιστοσελιδας για την οποια δημιουργειται ο ντερμινιστικος κωδικος
site=$(zenity --title="mGenPass GUI" --text="Please enter website:" --entry)

# Εαν πατηθει το Cancel, ή το website ειναι κενο βγαλε ενα απλο μυνηματακι και σταματα την εκτελεση του προγραμματος
    if [[ $? -eq 1 ]]; then
       zenity --title="mGenPass GUI" --text="Script is cancelled. GoodBye!" --info
       exit 1
    fi

# Υπολογισμος του ντετερμινιστικου κωδικου. 
genpass=$(echo $site:$secret | sha512sum | base64 | head -c ${2:-32})

echo ${genpass} | xclip -selection clipboard

# εμφανιση του ντετερμινηστικου κωδικου
zenity --title "mGenPass GUI" --text="Password for $site is: $genpass" --info

# Αδειασμα των προσωρινων μεταβλητων
unset secret site genpass

και μετα το τρεχεις ως ./mgenpass-gui.sh

η απο το τερματικο ή απο το γραφικο περιβαλλον (αλλα απο GUI με: bash mgenpass-gui.sh)

το σκριπτακι δεν ελεγχει για την υπαρχη του zenity. Και δεν ξερω αν υπαρχει το zenity ή αναλογο του στο MacOS μιας και βγαζω καντριλιες με το που ακουω Apple οπουδηποτε στην πληροφορικη.

2 Likes

ωραιος, θενξ για την προσπαθεια.
τωρα να δωσω feedback. Απο το παραπανω σκριπτακι λειπει η λειτουργεια με το xclip, δηλαδη η αντιγραφη του παραγωμενου κωδικου στο clipboard και δεν ξερω πως να την ενσωματωσω στο σκριπτ. Επισης, στο κειμενο που φαινεται στο zenity δε λεει «enter master password» που γραφει στο σκριπτ, αλλά «type your password» και τελος αν πατησεις cancel στο γραφικο που ανοιγει το zenity, αυτο συνεχιζει να λειτουργει…

το macOs που κολλαει;

To MacOS μπορεί να θεωρηθεί σαν ένας κλώνος του BSD. Έρχεται με ένα τερματικό, μια πανάρχαια και χιλιομπαλωμένη έκδοση του bash (για λόγους αδειών, αν μια εταιρεία μισεί το GPL σήμερα, είναι η Apple), έχει τις βασικές εντολές και θέλει κάποιες μικροαλλαγές.(πχ αντί για xclip θέλει pbcopy)

Θα έλεγα τρέχει και στα windows, αλλά εκεί δεν θα βρεις, τουλάχιστον ακόμα, τίποτα προεγκατεστημένο.

1 Like

ΟΚ το ενα σημειο του feedback το εφτιαξα. Αν δεις το ενημερωμενο σκριπτακι στο απο πανω post θα δεις οτι το xclip το εχω βαλει μεσα… και το δοκιμασα και δουλευει.

Για το δευτερο σημειο, δυστηχως αυτο ειναι κατι που ειναι αδηναμεια του zenity… και ειναι επηδει χρησιμοποιω παραθυρακι συγκεκριμενο για password (που κριβει τους χαρακτηρες). Αν εβαζα απλο πεδιο κειμενου θα μπορουσα να το αλλαξω αλλα και παλι ειναι λιγο δευτερευων κατα την γνωμη μου. Βεβαια εσυ εισαι ο χρηστης και αν ειναι και πολυ deal-breaker το ξανακοιταμε.

Το τριτο σημειο με το cancel αυτο γινεται γιατι στο σκριπτακι δεν υπαρχει αυτη τη στηγμη ελεγχος για το cancel οποτε με το που το πατας σε παει στην επομενη εντολη. Μπορει να το κοιταξω και να δω πως θα το σημαζεψω λιγο για να βγαινει αν πατησεις cancel πριν τον υπολογισμου του αποτελεσματος.

Το MacOS το αναφερα γιατι το ανεφερε και ο αρχικος δημιουργος του script ο @Talos :slight_smile:

Update: στο ανανεωμενο σκριπτακι επανω εχω βαλει τους ελεγχους για το τριτο σημειο απο το feedback και σταματαει επισεις εαν το password ή το website ειναι κενο.

Τωρα για το δευτερο σημειο οπως σου ειπα εκτως εαν αλλαξουμε το password σε entry δεν θα δουλεψει. Ελπιζω να σου κανει. Ριξε του μια ματια και ξαναριξε μου feedback.

1 Like

δεν ειναι καθολου deal breaker να εμφανιζει διαφορετικο κειμενο, αλλά αφου το παρατηρησα ειπα να το αναφερω.
Το προβλημα τωρα ειναι πως οταν γραφω καποιο password μου βγαζει το παρακατω μηνυμα
feedback-mGenpass

ΟΚ Αρα θελει λιγη ακομα δουλεια. Εβγαλα τους παραπανισιους ελεγχους. Τωρα ελεγχει μονο για το cancel.

δουλεψε το και το βλεπουμε λιγο αργοτερα εδω ειναι λιγο αργα για μενα :slight_smile:

1 Like

Τωρα δουλευει μια χαρα (το εχω βαλει ηδη σε launcer στο δευτερο πανελ) και επισης τωρα το περνει και στο clipboard το password οποτε η αντιγραφη γινεται απο εκει
καλη ξεκουραση και θενξ

edit
προτιμουσα να γινεται η αντιγραφη με μεσαιο κλικ, οποτε εσβησα απο το script το -selection clipboard και ολα καλα

Υπάρχουν αρκετά που μπορούν να γίνουν ώστε το απλό αυτό πραγματάκι να γίνει ένα λειτουργικό πακέτο λογισμικού. Γιατί να μην αποκτήσει ένα γραφικό περιβάλλον που να επικοινωνεί με κάποιο plugin για παράδειγμα; Και ενθαρύνω όποιον θέλει να το κάνει αυτό.

Αλλά υπάρχει μια ομορφιά στην απλή λύση που παρουσιάζω εδώ. Αν δεν έχεις τον πρόγραμμα το φτιάχνεις αμέσως όπου και να είσαι. Αυτό είναι μια πολύ χρήσιμη ιδιότητα!

Πάρε το lala:www.google.com υπολόγισε το SHA512 μετέτρεψε το σε ASCII με το base64 και πάρε τα πρώτα 32 ψηφία. Πιθανά να τα έχει έτοιμες τις συναρτήσεις ακόμα και στο Excel :crazy_face:

ΥΓ1: Ο κώδικας δεν είναι δικός μου. Κυκλοφορούν παραλλαγές πολλές στο δίκτυο. Παλιά είχα σκεφτεί την πιθανότητα και έκανα το ορθότερο πράγμα, αναζήτησα για έτοιμη λύση :stuck_out_tongue:. Είχα βρει τότε και μια σελίδα που υλοποιούσε κάτι σαν αυτό και σε javascript και είχα γράψει ένα άρθρο κάπου που δεν υπάρχει ποια.

ΥΓ2: Καλά τα έλεγε o Fred Brooks

1 Like