Entwicklung eines USB-Sticks mit Selbstzerstörungsfunktion / Sudo Null IT News

Schließlich wissen wir alle, dass der beste Weg, Daten zu schützen, darin besteht, sie zu zerstören, oder?

Nun, für die meisten von uns wäre die relevantere Antwort Verschlüsselung. Aber denken Sie an die Fälle, in denen das Gerät in die Hände derer fallen kann, die nicht durch Verschlüsselung gestoppt werden …

Meine Idee ist es, ein USB-Laufwerk zu erstellen, das kosmetisch und funktionell völlig identisch mit einem typischen USB-Flash-Laufwerk ist, mit einem Unterschied – wenn es auf Standardmethode angeschlossen wird, zeigt es keine Daten an.

Und was wird eine vernünftige Person definitiv nicht tun, bevor sie einen normalen USB-Stick anschließt? Leck deine Finger!

Alles ist richtig. Der Träger wird mit versteckten Elektroden ausgestattet, die den Widerstand des Fingers messen, der ihn in das Gerät einführt. Im Normalzustand beträgt der Widerstand des Fingers 1,5 MΩ, im nassen Zustand jedoch etwa 500 kΩ. Beim Laden wird ein solcher USB-Stick leer angezeigt, wenn der Widerstand zwischen einem Elektrodenpaar über dem angegebenen Schwellenwert liegt. Es ist nicht die eleganteste Lösung, aber ich denke, es findet eine gute Balance zwischen Lächerlichkeit und Funktionalität. Menschen mit Germophobie können ihren Finger unter dem Wasserhahn nass machen.

Notiz. Übers.: Im Original war die Umsetzung des Projekts in zwei kurze Artikel aufgeteilt, die der besseren Übersichtlichkeit halber zu einem zusammengefasst wurden.

▍ Wie ein Flash-Laufwerk funktioniert

Ein Flash-Laufwerk ist ein relativ einfaches elektronisches Gerät. Bei der Implementierung der ersten Version werde ich mich darauf konzentrieren, USB 2.0-Geschwindigkeiten zu erreichen.

Ein Standard-USB-Flash-Laufwerk besteht aus einem USB-Controller (in blauer Box), der mit einem NAND-Flash-Speicherchip (rote Box) verbunden ist. Dieser Chip fungiert als eigentliches Speichermedium, und der Controller speichert das USB-Frontend und die Logik, um damit zu interagieren.

Um die beabsichtigte Funktionalität zu implementieren, werde ich einen Controller verwenden, der mit einem Mikrocontroller gekoppelt ist, um die Elektroden zu lesen und möglicherweise den Mikroschaltkreis auszuschalten.

Beim Entwerfen von Hardwaregeräten ist es wichtig, die Wirtschaftlichkeit der Verwendung bestimmter Komponenten zu verstehen. Flash-Speicherchips sind universell und überall einsetzbar: in Smart-TVs, Computer-BIOS, Autos und so weiter. Der USB-Controller ist jedoch eine spezielle Komponente, die speziell für Flash-Laufwerke verwendet wird.

Spezialisierte Boards entstehen in einem riesigen Markt, in dem Hersteller versuchen, ihre Gewinnspannen zu senken. Es gibt nur ein paar Dutzend Hersteller von Flash-Laufwerken auf der Welt, und neue erscheinen nicht. Der Löwenanteil des Volumens stammt von einigen wenigen großen Fabriken, die Produkte zu vernachlässigbaren Margen verkaufen. Unter solchen Bedingungen wird kein neues USB-Medien-Startup den Markt beeinflussen können. Digikey oder Mouser eignen sich eindeutig nicht als Anbieter der erforderlichen Spezialkomponenten.

Ich durchsuchte das Internet nach zerlegten Flash-Laufwerken und suchte nach Inschriften auf Mikroschaltkreisen, als ich fand Goldmine: Eine Flash-Laufwerk-Datenbank, die die Teilenummern einiger USB-Controller-Boards auflistet. Nachdem ich mich für den SM3257EN entschieden hatte, fand ich seine Spezifikation und seinen Lieferanten.


Blockschaltbild SM3257EN

Dieser Chip sollte der Aufgabe gewachsen sein. Die Spezifikation ist gut geschrieben und enthält genügend Informationen. Ich habe dieses Teil in Kicad entworfen und mit einem NAND-Chip und einem USB-Anschluss kombiniert.

Jetzt muss ich dieses Gerät dazu bringen, Daten zu verbergen, es sei denn, der Benutzer bekommt nasse Finger.

Das Chipaktivierungssignal (CE) vom USB-Controller geht direkt dorthin. Wenn dieses Signal niedrig ist, schaltet sich der Chip ein. Ich verwende das „ODER-Gatter“ zusammen mit dem Steuersignal, um den Speicher auszuschalten.

Wenn mein Abschaltsignal hoch ist, spielt der CE-Zustand keine Rolle mehr. Der Ausgang des Gatters ist hoch, was dazu führt, dass der Speicher ausgeschaltet wird.

Was die Steuerung des Abschaltsignals selbst betrifft, verwende ich dafür ATtiny24 und einen mit den Elektroden verbundenen Leitfähigkeitsverstärker. Im zweiten Teil werde ich ausführlicher darauf eingehen.

▍ Auftrag

Ich erstelle Geräte, um verschiedene Probleme zu lösen, und baue parallel eine Community darum herum auf. Wenn Sie denken, dass Sie eine Verwendung für das in diesem Artikel beschriebene Gerät finden können, oder helfen möchten, dann werde ich mich freuen, mit Ihnen zu sprechen. Ich habe speziell erstellt

Discord-Server

für Gleichgesinnte. Alle Materialien sind unter erhältlich

GitHub

.

Teil 2

Als nächstes werde ich den Prozess des Entwerfens eines USB-Flash-Laufwerks mit einem Geheimnis und die dabei aufgetretenen Schwierigkeiten beschreiben. Es geht um das Prototyping, das Schema des Geräts, sein Layout sowie die Suche nach mechanischen Komponenten.

Es gab viele Kommentare zum vorherigen Teil, dass sich das Flash-Laufwerk nicht wirklich selbst zerstört. Als Reaktion auf solche Aussagen wird es nun zwei Modi haben: einfaches Verbergen von Daten und vollwertige Selbstzerstörung.

▍ Körper

Ich habe einen Laden in Übersee gefunden, der USB-Hüllen ohne Einbauten verkauft, was mir die Mühe erspart hat, meine eigenen zu entwickeln. Ich habe noch nie ein Spritzgussgehäuse entworfen, und heute ist dieser Tag noch nicht gekommen.


USB-Mediengehäuse

Von den vier erhaltenen Mustern bevorzuge ich Schwarz (ganz links auf dem Foto). Leider konnte mir der Lieferant keine 3D-CAD-Dateien zur Verfügung stellen, sondern nur DXF. Falls Sie es nicht wussten, DXF ist ein offenes Vektorformat, das zum Austausch von Grafikdaten verwendet wird. Nicht ideal, aber besser als nichts.


Rumpfskizze

Ich nahm diese DXF-Skizzen, importierte sie in Freecad und „extrudierte“ sie dann in 3D-Modelle. Es stellte sich heraus, dass es eine seltsame Art war, das Modell zu zeichnen. Die DXF-Linien wurden in dimensionslose FreeCAD-Skizzenelemente umgewandelt und dann extrudiert. Dann habe ich die Leiterplatte in das Layout eingefügt, und das kam dabei heraus:


Gerätelayout

Ich hoffe, dass das fertige Gerät in etwa so aussehen wird.

▍ Vollständige Selbstzerstörung

Meine Aufgabe ist es, ein völlig diskretes Gerät zu erstellen, damit ernsthaft interessierte Personen, wenn Ihr Flash-Laufwerk in die Hände fällt, keinen Verdacht auf seine Leere haben. Während des Anschlusses sollte es jedoch nicht explodieren, schmelzen, ätzende Substanzen freisetzen oder einen anderen Wahnsinn erzeugen (obwohl dies den Artikel viel interessanter machen würde). Das Laufwerk muss sich lautlos irreparabel beschädigen.

Und das realisiere ich, indem ich die Spannungsleitung des Speicherchips überlaste. Ich muss sagen, dass ich mich zum ersten Mal wirklich mit dem Abschnitt befasst habe, in dem die maximalen Bewertungen einer Komponente aufgeführt sind.

Um den Mikroschaltkreis dauerhaft zu deaktivieren, müssen mehr als 4,6 V an ihn angelegt werden. Dazu können Sie einen einfachen Spannungsverdoppler auf der 5V-Leitung verwenden.

Das Funktionsprinzip dieses Schemas ist recht einfach. Wenn Distruct_PWM niedrig ist, lädt sich C1 (oben) auf 4,3 V auf, das sind 5 V minus 0,7 V Abfall über der LED. Wenn ich Distruct_PWM vom Mikrocontroller auf einen hohen Pegel setze, erhöht dies den niedrigen Pegel von C1 auf 5 V, für ein Gesamtpotential von 9,3 V. Außerdem fällt diese Spannung in C2 (von oben), wo sie bis zum nächsten Zyklus verweilt. Wenn Sie diese Spannung an den Speicherchip anlegen müssen, aktivieren Sie Q1 und Sie können sich von Bildern von süßen Hunden verabschieden.

▍ Auslesemuster

Nun, woher weiß das Gerät, ob der Benutzer seine Finger geleckt hat oder nicht, um über die Vernichtung von Daten zu entscheiden? Dies kann durch Messen des Widerstands des Körpers, nämlich der menschlichen Haut, realisiert werden. Ist der Hautwiderstand des Fingers gering (500 kOhm oder weniger), kann davon ausgegangen werden, dass er nass ist. Um den Widerstand des Körpers zu messen, gibt es wahrscheinlich eine Mikroschaltung, aber aufgrund ihrer Knappheit musste ich mich mit Standardkomponenten begnügen.

Ich habe diese Stromquellenschaltung aus dem Buch The Art of Circuitry entnommen. Lassen Sie uns das Funktionsprinzip analysieren. Die Zenerdiode U1 ist die Quelle der Referenzspannung; Wenn Spannung daran angelegt wird, werden genau 2,5 V durchgelassen. Die Kathode ist mit R2 und die Anode mit dem nichtinvertierenden Eingang des Operationsverstärkers verbunden. Der Ausgang dieses Verstärkers liefert den Strom, der benötigt wird, um die beiden Eingänge auf der gleichen Spannung zu halten. Daher können wir davon ausgehen, dass 2,5 V auch durch R2 fließen. In diesem Fall ist der durch R2 fließende Strom gleich:

Unsere Elektroden sind über J1 verbunden und die Spannung in Vx und Vs ist wieder durch das Ohmsche Gesetz gegeben:

Jetzt können Sie diese beiden Gleichungen verwenden, um den Lastwiderstand RL zu finden:

Mit dieser Formel berechnen wir den Hautwiderstand.

▍ Mikrocontroller

Ich habe einen einfachen ATtiny25 als Gehirn des Projekts gewählt. Es ist ein Schritt nach unten von den 32-Bit-ARM-Chips, die ich normalerweise verwende. Es war schön, die gesamte Anwendung mit nur einer Header-Datei in 55 Codezeilen unterzubringen.

Um den Code zu testen, habe ich einen PWM-Kanal eingerichtet. Ich habe die Kalibrierung durchgeführt, indem ich die Spannung von den ADC- und PWM-Ausgängen mit einem Multimeter im DC-Strommessmodus gelesen habe.

#include // PWM PA6 // ADC PA1 // LED PA2 const float R2 = 747e3; // R2 auf Schema Const Float Rth = 0.4e6; // Wenn r > 1 MΩ, dann ist der Finger trocken void init_pwm () { DDRA | = (1 << PA6); // PA6 als Ausgang OCR1A = 0x0000; TCCR1A |= (1 << COM1A1); // setze nicht-invertierenden Modus TCCR1A |= (1 << WGM11) | (1 << WGM10); // 10-Bit-phasenkorrigierten PWM-Modus einstellen TCCR1B | = (1 << CS11); // Prescaler auf 8 setzen und PWM starten aufrechtzuerhalten. Void set_pwm (Float-Spannung) {OCR1A = (Spannung / 5) * 0x400; } Void init_adc () { ADMUX & = ~ (1 << REFS0); // 5V als Referenzspannung verwenden ADMUX &= ~(1 << REFS1); ADMUX |= (1 << MUX0); // verwende ADC1 (PA1) ADCSRB |= (1 << ADLAR); // linksbündige Operation (8 Bits) in der Reihenfolge ADCSRA |= (1 << ADEN); // ADC aktivieren} Float read_adc () { Float-Spannung; ADCSRA |= (1 << ADSC); while(ADCSRA & (1 << ADSC)) {}; Spannung = ADCH; Spannung = Spannung * 5 / 0xff; Rückspannung; aufrechtzuerhalten. int main (void) { DDRA = 1 << PA2; // LED init_pwm (); init_adc(); während (1) { float v, r = 0; v = read_adc(); set_pwm(v); r = v * (R2/2,5); (r > Rth) ? (PORTA &= ~(1 << PA2)): (PORTA |= 1 << PA2); } }

▍ Montage

Im Allgemeinen verwende ich keine Prototyping-Boards, wenn ich im Auftrag arbeite. Es erweist sich als zu teuer und macht bei modernen SMD-Bauteilen keinen Sinn. Normalerweise wechsle ich vom Modellieren direkt zum Schaltplan- und Platinendesign. In diesem Projekt habe ich jedoch immer noch das Steckbrett verwendet. Ich tat dies, um den Speicherchip nicht vorzeitig zu brennen. Nostalgie überkam mich, als wäre ich wieder in der Schule gewesen und hätte mit DIP-Komponenten und Papierschaltkreisen gearbeitet.


Es werde Licht!

Die Logik funktioniert super. Alle Nuancen, die sich während der Arbeit mit diesem Prototyp ergeben haben, habe ich in das endgültige Design integriert.

Wenn alles gut geht, plane ich bald eine kleine Crowdfunding-Kampagne zu starten, um ein paar dieser Geräte für die Community zu sammeln.

Aller Erfolg!

Telegrammkanal und gemütlich plaudern für Kunden

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *