Krautkanal.com

Veröffentlicht am 2015-05-17 20:02:10 in /prog/

/prog/ 7106: Kryptographie

m_kalibry Avatar
m_kalibry:#7106

Hallo Bernd,

ich studiere derzeit Informatik. Worauf sollte ich besonderen Wert legen, wenn ich später mal mit Kryptographie arbeiten möchte? Mathe kann ich grundsätzlich ganz gut, auch auf universitärem Niveau.

yesmeck Avatar
yesmeck:#7107

Kannst du aus dem Stegreif RSA erklären und beweisen? Falls nicht, weißt du schonmal, womit du anfangen kannst.

a_khadeko Avatar
a_khadeko:#7110

Wie weit bist du denn mit deinem Studium?

keremk Avatar
keremk:#7111

Steile These: Dann möchtest du Mathe und nicht Informatik studieren.

terpimost Avatar
terpimost:#7112

>>7111
Nicht unbedingt notwendig.

teylorfeliz Avatar
teylorfeliz:#7116

Neben den offensichtlich vom Thema her relevanten Dingen wäre es sicher eine gute Idee, einfach eine Menge Erfahrung in system programming zu sammeln. Also, in C wird ja Kryptographie vernünftigerweise nunmal implementiert, und da sollte man sein Handwerk schon gut beherrschen, damit der Code am Ende auch so sicher ist wie der Algorithmus.

adriancogliano Avatar
adriancogliano:#7117

>>7116
> Also, in C wird ja Kryptographie vernünftigerweise nunmal implementiert

> vernünftigerweise

Warum ist das so? Geht es nur um Geschwindigkeit? Eigentlich sollte man ja meinen, gerade bei Kryptographie nimmt man eine Sprache, mit der die schlimmen Sachen wie in C nicht so schnell passieren können.

doooon Avatar
doooon:#7118

>>7117
Nunja. Einerseits Performance.
Andererseits weitet der Garbage Collector dir in jeder high-level-Sprache ganz schnell den timing side channel, wenn du verstehst, was ich meine.
Auch, wo welche Daten im RAM liegen, ist oft wichtig. So schön z.B. immutability ist: Wenn sie dazu führt, dass ein Klartext noch bis Programmende im Speicher liegt, hast du mehr Probleme geschaffen als gelöst. Also, das ist eben wieder das GC-Problem. In Java kann man immerhin noch primitive[]s benutzen und dann alle Indices zeroen, aber wie willst du in noch hochleveligeren Sprachen, wo keine primitives gibt ("alles ist ein Objekt") gezielt irgendeinen Speicherinhalt löschen?

Ich bin gar kein Experte auf dem Gebiet und will nicht behaupten, dass das alles "unlösbar" ist; diese Probleme sollten nur vor Augen führen, wie unheimlich viel Probleme sich für so sensible Themen daraus ergeben, eine vermeintlich "sicherere" Sprache zu verwenden.

krdesigndotit Avatar
krdesigndotit:#7119

>>7118
>>7117
Ich würde an der Stelle OP einfach mal Rust empfehlen, eine neue Programmiersprache von Mozilla, die für Systemprogrammierung entwickelt wurde und sich seit letzter Woche in der Version 1.0 befindet. Die Sprache nutzt Ownership und kommt so ohne Garbage-Collector aus, da eventuelle Speicherfehler wie zum Beispiel Speicherzugriffsverletzungen und Speicherlecks schon während der Kompilierung gefunden werden. Das Typsystem wurde sehr von Haskell beeinflusst und fördert eine bessere Codestrukturierung als bei C.

cat_audi Avatar
cat_audi:#7120

C ist gar nicht so geeignet. Tatsächlich spottet es jeder Beschreibung, was man für Klimmzüge vollführen muß, um so triviale Dinge wie

* Variable mit definierter Breite (also z.B. 4 Byte)
* Zugriff auf Carry-Flag oder auch nur
* Überlauferkennung

portabel hinzukriegen. Und dann hofft man immer noch, daß der Compiler so schlau ist, 80% der C-Rechnungen, die man nur wegen tja is halt dscheise hingeschrieben hat, wieder wegzumachen.

Zum Beispiel ist Multiplikation ein Maschinenbefehl multipliziere dingsda mit dangsda, das Ergebnis ist natürlich doppelt so lang. In C darf man erstmal dingsda nach dem doppelt so langen Typ casten, den keine Sau braucht, sonst hurr durr zonk kaput (es kann auch gehen, wegen der int promotion, C ist keine Sprache, sondern ein Strafgesetzbuch)

vocino Avatar
vocino:#7121

>>7119
Ja, Rust hat sicher das Potential, hier das beste aus beiden Welten zu liefern, allerdings ist es ja noch keineswegs etabliert.

>>7120
Richtig, auch in C ist es alles andere als trivial. Daher sagte ich ja, dass es extrem wichtig ist, *gutes* C zu können.

jodytaggart Avatar
jodytaggart:#7124

Mathebernd hier.

Mathematisch würde es sich wahrscheinlich lohnen, wenn du dich in Richtung Algebra fortbildest, denn viele Kryptoverfahren basieren auf Algebra. Du könntest zum Beispiel die Algebraeinführungsvorlesug für Mathematikr (nicht lineare Algebra) an deiner Uni besuchen, und dann schauen was du noch algebraisches hören kannst, was in Richtung Kryptographie geht.

alexcican Avatar
alexcican:#7133

Informatikstudium abbrechen, Mathe studieren. Alternativ eigenstaendig in Mathematik neben Infostudium fortbilden.

Es sind die Mathematiker die Krytographie entwickeln, ausnahmslos. Informatiker wenden nur an.

carlyson Avatar
carlyson:#7134

Naja. Deine beruflichen Perspektiven sehen so aus:
NSA oder BND, oder deren Fronten (Bundesamt für Fnordtechnik)
Oder eine Nische auf der Uni (selten, gibe monies für gender, nervige leerverpflichtungen usw.)

heikopaiko Avatar
heikopaiko:#7140

>>7133
Er hat ja weder von Entwickeln noch Anwenden gesprochen, sondern von Arbeiten mit. Insofern ist nicht ganz klar, was er will.

mugukamil Avatar
mugukamil:#7147

>>7134
Was? Es gibt reichlich private Firmen die nur sec machen. Gamma group mal gehört? Reichlich krebsige Webseite, aber die stellen auch nicht jeden ein...

antonyryndya Avatar
antonyryndya:#7150

Und da bekombst du ein Büro und darfst den ganzen Tag lang Aaronson und andere Papiere lesen? Deine Kontribution ist dann ein Algorithmus in 20 Jahren, für den die Firma.. äh.. nichts bekommt?
Das glaubst du ja wohl selber nicht.

lisakey1986 Avatar
lisakey1986:#7152

>>7150
> http://surveillance.rsf.org/en/gamma-international/

Erst schlau machen, dann posten.

jonkspr Avatar
jonkspr:#7164

Für die grundlegenden Sachen brauchst du eigentlich nur Gruppentheorie und etwas Zahlentheorie, d.h. du solltest besonderen Wert auf die mathematischen Bereiche Algebra und Zahlentheorie legen.

Wenn du etwas abgefahrernere Sachen machen möchtest, z.B. ECC(Elliptic-Curve-Cryptography), dann brauchst du noch viel meer z.B. algebraische Geometrie und damit noch viel mehr Algebra. Also brauchst du einiges an Mathematik aus den bereichen: Algebra, Zahlentheorie und alg. Geometrie.

Über das Programmier-Gedöns kann ich nicht viel sagen, da das aus mathematischer Sicht kein Thema ist. Mein Tipp wäre auch einfach direkt Mathe zu studieren. Die Implementierung ist zwar natürlich praktisch sehr wichtig, aber ohne solide Theorie kannste dein Krypto gleich in die Tonne kloppen.

woodydotmx Avatar
woodydotmx:#7165

>>7164
> auch einfach direkt Mathe zu studieren
> aber ohne solide Theorie kannste dein Krypto gleich in die Tonne kloppen.

Vermutlich dies. Selbst Fefe traut sich nicht an Kryptozeugs ran.

guischmitt Avatar
guischmitt:#7230

>>7133
>>7164
>>7165

Dies, so sehr dies.

t. Kryptobernd

Neuste Fäden in diesem Brett: