some1 Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 (επεξεργασμένο) Καλησπέρα σας! Οι γνώστες mysql παρακαλώ όπως προσφέρουν τα φώτα τους. Έχω έναν πίνακα αποτελούμενο απο 80.000.000 rows με δύο columns, "id1" και "id2" τύπου bigint(30). Τα IDs σε αυτά τα δύο κελιά είναι integer θετικοί αριθμοί από ένα (1) έως δεκαέξι (16) ψηφία. μικρότερη τιμή: 5 / μεγαλύτερη τιμή: 100004895435177 Θα ήθελα μέσω mysql εντολής να κρυπτογραφήσω μονάδικα αυτά τα IDs, έτσι ώστε να μην είναι δυνατή η ταυτοποίηση τους. Σκοπός δηλαδή είναι μόνον να κρατηθεί η σχέση σε ζευγάρια που υπάρχει τώρα μεταξύ κάθε row id1 & id2. Υπάρχουν πολλά στιγμιότυπα του κάθε ID στον πίνακα, επομένως η εντολή θα πρέπει κάθε φορά να κρυπτογραφεί το ίδιο ID στο ίδιο πάντα string. π.χ. το id : "156756", όσες φορές βρεθεί στον πίνακα να μετατραπεί σε "c34b267". Η mysql εντολή ιδανικά θα καταγράφει εαν κάθε row μετρατράπηκε σωστά και δεν σταμάτησε σε κάποιο σημείο η διαδικασία. Κάποια ιδέα; Επεξ/σία 21 Δεκεμβρίου 2015 από some1
defacer Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Κάποια ιδέα; Αυτό που σκέφτεσαι να κάνεις δεν έχει νόημα. Δε μπορώ να σου πω για ποιό λόγο ακριβώς επειδή δεν μας λες ποιό είναι το πρόβλημα που προσπαθείς να λύσεις, αλλά η προσέγγιση αυτή είτε δε θα έχει το επιθυμητό αποτέλεσμα είτε θα είναι χειρότερη από άλλες εναλλακτικές.
some1 Δημοσ. 21 Δεκεμβρίου 2015 Μέλος Δημοσ. 21 Δεκεμβρίου 2015 φαντάσου οτι το κάθε Id είναι η ταυτότητα ενός ατόμου. π.χ. o defacer είναι το id "220054" στο Insomnia. ο some1 το "157541". Το κάθε row (ζεύγος id1 & id2) δείχνει μια σχέση μεταξύ τους. π.χ. το 220054 είναι ζευγάρι με τον 157541. Θέλω να κρατήσω την σχέση αυτή, αλλά να μην μπορεί κάποιος να πει οτι το "220054" είναι ο defacer. Αν το 220054 μετατραπει σε "123abc" δεν θα μπορεί να γνωρίζει ποιος είναι πίσω από αυτή την σχέση. σημείωση: ο πίνακας είναι οριστικός. η κρυπτογράφηση θα γίνει μια και μοναδική φορά.
παπι Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Και αν δεν γνωριζεις ποιοι εχουν σχεση, ποιο το νοημα να υπαρχει σχεση;
some1 Δημοσ. 21 Δεκεμβρίου 2015 Μέλος Δημοσ. 21 Δεκεμβρίου 2015 για στατιστικούς σκοπούς. Θα τρέξουν κάποιες μετρήσεις πάνω στο κρυπτογραφημένο δείγμα. παρ' όλα αυτά, γιατί πιστεύεται πως δεν μπορεί να γίνει κάτι τέτοιο;
παπι Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Ααα καταλαβα. Νομικο το θεμα. Αν δεν κανω λαθος, το id δεν ειναι προσωπικο δεδομενο αρα δεν υπαρχει θεμα. Ασε που νομικα απλα δεν πρεπει να προβαλεις τα δεδομενα, δεν χρειαζεται κρυπτογραφηση
some1 Δημοσ. 21 Δεκεμβρίου 2015 Μέλος Δημοσ. 21 Δεκεμβρίου 2015 ακριβώς, είναι θέμα προστασίας "προσωπικών" στοιχείων. Ακόμα και να μην υπάρχει νομικό καθαρά θέμα, έχει συμφωνηθεί να προστατευθεί η ταυτότητα των χρηστών. Ο πίνακας θα διαμοιραστεί, οπότε τα δεδομένα θα γίνουν διαθέσιμα προς όλους. Αυτός είναι και ο λόγος της παραπάνω ανάγκης.
παπι Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Τοτε πρπει να φτιαξεις μια αλλη βαση, στην οποια θα εχεις μονο αυτα που θες. Τα Id δεν τα βαζεις καν, φτιαχνεις δικασου.
some1 Δημοσ. 21 Δεκεμβρίου 2015 Μέλος Δημοσ. 21 Δεκεμβρίου 2015 όπως εξήγησα παραπάνω, δεν μπορώ να "γεννήσω" IDs από το "κεφάλι" μου, διότι το ίδιο ID εμφανίζεται πολλές φορές στον πίνακα, με διαφορετικό ζευγάρι (ID2). Επομένως θα συναντήσω πολλές φορές π.χ. το id "234567" στον πίνακα, δεν μπορώ κάθε φορά να το μετατρέπω σε άλλο αριθμό. Ο πίνακας πρέπει να δωθεί ολόκληρος ως έχει. Καταλαβαίνω πως θεωρείτε πως κάποια άλλη λύση θα ανταποκριθεί στην ανάγκη μου, όμως το πρόβλημα μου είναι πολύ συγκεκριμένο. Μπορείτε να με συμβουλέψετε πως θα επιτύχω αυτό που ζητώ;
midenmidenefta Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Αν καταλαβαινω καλα (που μαλλον ΔΕΝ καταλαβαινω) εχεις ενα "junction/bridge/associative/η οπως αλλιως το λενε..." table, οποτε φοβαμαι πως το μονο που μπορεις να κανεις (μιας και η "σχεση" μεταξυ των ID's πρεπει να διατηρηθει) ειναι να "αλλοιωσεις" με καποιο τροπο τα ID's σε ενα αλλο πινακα (ισως κρατωντας και σε μια καινουργια επιπλεων στηλη μια αναφορα για την "ψευτο-κρυπτογραφημενη σχεση" για λογους πιστοποιησης) - ομως αφου ηδη τα ID's δεν ειναι "natural keys", οτιδηποτε αλλο και να κανεις... θα καταληξεις σε εναν παρομοιο πινακα, απλα με ΣΤΑΘΕΡΑ (αρα -ευκολα- αποκρυπτογραφουμενα) "αλλιωμενα" ID's! Βεβαια μαλλον δεν καταλαβαινω καλα το προβλημα σου, ουτε ξερω την mysql...
some1 Δημοσ. 21 Δεκεμβρίου 2015 Μέλος Δημοσ. 21 Δεκεμβρίου 2015 Χωρίς να πρέπει να προβληματιστείτε για οποιαδήποτε άλλη σχέση μεταξύ των στοιχείων του πίνακα, θελώ απο αυτό: ID 1 | ID 2 --------------------- 5214 | 130 5214 | 23236 23236 | 130 130 | 11 … | … να καταλήξω σε αυτό (το φορμά των κρυπτογραφημένων πλέον IDs είναι τυχαίο στο παράδειγμα): ID 1 | ID 2 --------------------- A1ce3 | Wb1cw A1ce3 | 123cvb 123cvb | Wb1cw Wb1cw | Owq9i … | … το "5214", όσες φορές και αν συναντηθεί στον πίνακα, θα πρέπει να μετατρέπεται σε "A1ce3", κ.ο.κ
defacer Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 φαντάσου οτι το κάθε Id είναι η ταυτότητα ενός ατόμου. π.χ. o defacer είναι το id "220054" στο Insomnia. ο some1 το "157541". Το κάθε row (ζεύγος id1 & id2) δείχνει μια σχέση μεταξύ τους. π.χ. το 220054 είναι ζευγάρι με τον 157541. Θέλω να κρατήσω την σχέση αυτή, αλλά να μην μπορεί κάποιος να πει οτι το "220054" είναι ο defacer. Αν το 220054 μετατραπει σε "123abc" δεν θα μπορεί να γνωρίζει ποιος είναι πίσω από αυτή την σχέση. σημείωση: ο πίνακας είναι οριστικός. η κρυπτογράφηση θα γίνει μια και μοναδική φορά. Χωρίς να πρέπει να προβληματιστείτε για οποιαδήποτε άλλη σχέση μεταξύ των στοιχείων του πίνακα, θελώ απο αυτό: ID 1 | ID 2 --------------------- 5214 | 130 5214 | 23236 23236 | 130 130 | 11 … | … να καταλήξω σε αυτό (το φορμά των κρυπτογραφημένων πλέον IDs είναι τυχαίο στο παράδειγμα): ID 1 | ID 2 --------------------- A1ce3 | Wb1cw A1ce3 | 123cvb 123cvb | Wb1cw Wb1cw | Owq9i … | … το "5214", όσες φορές και αν συναντηθεί στον πίνακα, θα πρέπει να μετατρέπεται σε "A1ce3", κ.ο.κ Δεν καταλαβαίνω γιατί επιμένεις να μιλάς για κρυπτογράφηση. Επίσης, από προσωπική εμπειρία όταν κάποιος ρωτάει λόγω έλλειψης γνώσεων και δε συζητάει ακριβώς το σενάριο που αντιμετωπίζει, σχεδόν πάντα καταλήγουμε σε δάκρυα (ή έστω, εν δυνάμει δάκρυα) επειδή α) η έλλειψη γνώσεων δεν του επιτρέπει να δει τα προβλήματα στη λύση που σκέφτεται και β) το γεγονός ότι δεν συζητάει το σενάριο δεν επιτρέπει ούτε σε άλλους να τα δουν. Πάρτο και κάντο ο,τι θες. Τώρα όσον αφορά αυτό που ρωτάς, μου φαίνεται ότι θα ήταν trivial να μοιράσεις σε όλους τους users διαφορετικά "fake id" απλώς ανακατεύοντας αυτά που ήδη έχεις: παίρνεις μια λίστα με τα πραγματικά id, την κάνεις shuffle και αντιστοιχίζεις το αποτέλεσμα ένα προς ένα με τα πραγματικά id. Εναλλακτικά μπορείς να επιλέξεις ένα secret και απλά να αντιστοιχίσεις κάθε παλιό id σε SHA-256(secret + id). Αποκλείεται να έχεις collisions, κι αν πέσεις στη μία περίπτωση στο απιθανικομμύριο να έχεις απλά αλλάζεις το secret και ξαναδοκιμάζεις.
midenmidenefta Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Και εγω ΔΕΝ καταλαβαινω την "κρυπτογραφηση" που θελει να εφαρμοσει. Δηλαδη φιλε αν ενωσεις (union) τις στηλες ID1 και ID2 του πινακα, μετατρεψεις/αλλοιωσεις τα μοναδικα ID's που θα προκυψουν με καποιο τροπο (οπως ο αποπανω προτεινει, η κατι αλλο δικο σου), και επανεισαγεις τα "ψευτο-κρυπτογραφημενα" (απλως αλλιωμενα στην πραγματικοτητα) αντικαθιστωντας τα αυθεντικα με τα αλλιωμενα οπου τα συναντας, δεν ειναι αρκετο;
some1 Δημοσ. 21 Δεκεμβρίου 2015 Μέλος Δημοσ. 21 Δεκεμβρίου 2015 η πρόταση σου για "SHA-256(secret + id)" νομίζω είναι αυτό που θα ήθελα να επιτύχω. Ειλικρινά εξήγησα όσο καλύτερα μπορούσα το σενάριο, αν σας μπερδεύω απολογούμαι. Θα μου εξηγήσεις πως θα επιτύχω αυτό που προτείνεις;
defacer Δημοσ. 21 Δεκεμβρίου 2015 Δημοσ. 21 Δεκεμβρίου 2015 Θα φτιάξεις ένα καινούριο πίνακα whatever που θα πάρει μέσα τις hashed τιμές και θα δώσεις ξερωγώ INSERT INTO whatever id1, id2SELECT (SHA2(CONCAT(secret, id1), 256), SHA2(CONCAT(secret, id2), 256)) FROM existing_table και αυτά. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα