Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα σας!

 

Οι γνώστες 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 μετρατράπηκε σωστά και δεν σταμάτησε σε κάποιο σημείο η διαδικασία.
 
Κάποια ιδέα; :)
Επεξ/σία από some1
Δημοσ.

Κάποια ιδέα; :)

 

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

Δημοσ.

φαντάσου οτι το κάθε Id είναι η ταυτότητα ενός ατόμου. π.χ. o defacer είναι το id "220054" στο Insomnia. ο some1 το "157541". Το κάθε row (ζεύγος id1 & id2) δείχνει μια σχέση μεταξύ τους. π.χ. το 220054 είναι ζευγάρι με τον 157541. Θέλω να κρατήσω την σχέση αυτή, αλλά να μην μπορεί κάποιος να πει οτι το "220054" είναι ο defacer. Αν το 220054 μετατραπει σε "123abc" δεν θα μπορεί να γνωρίζει ποιος είναι πίσω από αυτή την σχέση.

 

σημείωση: ο πίνακας είναι οριστικός. η κρυπτογράφηση θα γίνει μια και μοναδική φορά.

Δημοσ.

για στατιστικούς σκοπούς. Θα τρέξουν κάποιες μετρήσεις πάνω στο κρυπτογραφημένο δείγμα. παρ' όλα αυτά, γιατί πιστεύεται πως δεν μπορεί να γίνει κάτι τέτοιο;

Δημοσ.

Ααα καταλαβα. Νομικο το θεμα. Αν δεν κανω λαθος, το id δεν ειναι προσωπικο δεδομενο αρα δεν υπαρχει θεμα. Ασε που νομικα απλα δεν πρεπει να προβαλεις τα δεδομενα, δεν χρειαζεται κρυπτογραφηση

Δημοσ.

ακριβώς, είναι θέμα προστασίας "προσωπικών" στοιχείων. Ακόμα και να μην υπάρχει νομικό καθαρά θέμα, έχει συμφωνηθεί να προστατευθεί η ταυτότητα των χρηστών. Ο πίνακας θα διαμοιραστεί, οπότε τα δεδομένα θα γίνουν διαθέσιμα προς όλους. Αυτός είναι και ο λόγος της παραπάνω ανάγκης.

Δημοσ.

Τοτε πρπει να φτιαξεις μια αλλη βαση, στην οποια θα εχεις μονο αυτα που θες. Τα Id δεν τα βαζεις καν, φτιαχνεις δικασου.

Δημοσ.

όπως εξήγησα παραπάνω, δεν μπορώ να "γεννήσω" IDs από το "κεφάλι" μου, διότι το ίδιο ID εμφανίζεται πολλές φορές στον πίνακα, με διαφορετικό ζευγάρι (ID2). Επομένως θα συναντήσω πολλές φορές π.χ. το id "234567" στον πίνακα, δεν μπορώ κάθε φορά να το μετατρέπω σε άλλο αριθμό.

 

Ο πίνακας πρέπει να δωθεί ολόκληρος ως έχει. Καταλαβαίνω πως θεωρείτε πως κάποια άλλη λύση θα ανταποκριθεί στην ανάγκη μου, όμως το πρόβλημα  μου είναι πολύ συγκεκριμένο. Μπορείτε να με συμβουλέψετε πως θα επιτύχω αυτό που ζητώ;

Δημοσ.

Αν καταλαβαινω καλα (που μαλλον ΔΕΝ καταλαβαινω) εχεις ενα "junction/bridge/associative/η οπως αλλιως το λενε..." table, οποτε φοβαμαι πως το μονο που μπορεις να κανεις (μιας και η "σχεση" μεταξυ των ID's πρεπει να διατηρηθει) ειναι να "αλλοιωσεις" με καποιο τροπο τα ID's σε ενα αλλο πινακα (ισως κρατωντας και σε μια καινουργια επιπλεων στηλη μια αναφορα για την "ψευτο-κρυπτογραφημενη σχεση" για λογους πιστοποιησης) - ομως αφου ηδη τα ID's δεν ειναι "natural keys", οτιδηποτε αλλο και να κανεις... θα καταληξεις σε εναν παρομοιο πινακα, απλα με ΣΤΑΘΕΡΑ (αρα -ευκολα- αποκρυπτογραφουμενα) "αλλιωμενα" ID's!

Βεβαια μαλλον δεν καταλαβαινω καλα το προβλημα σου, ουτε ξερω την mysql...

Δημοσ.

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

 

απο αυτό:

 
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", κ.ο.κ 

Δημοσ.

φαντάσου οτι το κάθε 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 και ξαναδοκιμάζεις.

Δημοσ.

Και εγω ΔΕΝ καταλαβαινω την "κρυπτογραφηση" που θελει να εφαρμοσει.

Δηλαδη φιλε αν ενωσεις (union) τις στηλες ID1 και ID2 του πινακα, μετατρεψεις/αλλοιωσεις τα μοναδικα ID's που θα προκυψουν με καποιο τροπο (οπως ο αποπανω προτεινει, η κατι αλλο δικο σου), και επανεισαγεις τα "ψευτο-κρυπτογραφημενα" (απλως αλλιωμενα στην πραγματικοτητα) αντικαθιστωντας τα αυθεντικα με τα αλλιωμενα οπου τα συναντας, δεν ειναι αρκετο;

Δημοσ.

η πρόταση σου για "SHA-256(secret + id)" νομίζω είναι αυτό που θα ήθελα να επιτύχω. Ειλικρινά εξήγησα όσο καλύτερα μπορούσα το σενάριο, αν σας μπερδεύω απολογούμαι. Θα μου εξηγήσεις πως θα επιτύχω αυτό που προτείνεις;

Δημοσ.

Θα φτιάξεις ένα καινούριο πίνακα whatever που θα πάρει μέσα τις hashed τιμές και θα δώσεις ξερωγώ

 

INSERT INTO whatever id1, id2
SELECT (SHA2(CONCAT(secret, id1), 256), SHA2(CONCAT(secret, id2), 256))
FROM existing_table
 

και αυτά.

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...