Wer knackt die Verschlüsselung ???

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dllfreak2001 hat geschrieben:Angeblich hat irgendwo in Indien auf einer Uni so nen Typ ein 3D-Codierungsverfahren entwickelt, das es ermöglicht paar Gigabyte auf ein Blatt Papier zu speichern.
Rückkehr der Paper Disk: 256 GByte auf A4-Blatt: http://www.golem.de/0611/49141.html

(man beachte den Update-Text)

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

na und?
...auf ner rolle Tesa kann man auch zig GByte speichern...

[edit]
Ausser acht gelassen wird bei diesen Zahlenspielen aber die Codierung der Daten, zu denen sich Sainul Abideen auch bei "Arab News" bewusst ausschwieg. Durch den Einsatz einfacher, mathematisch leicht zu erfassender geometrischer Formen, dürfte es sich nach den bisherigen Angaben um eine dreidimensionale Codierung auf einem zweidimensionalem Medium handeln, wie das beispielsweise auch bei den seit Jahren in Entwicklung befindlichen holografischen Speichern der Fall ist.

dass die schon seit jahren daran arbeiten, holografie auch zur datenspeicherung zu nutzen, ist klar.
schließlich ist das verfahren der fotografischen holografie schon so alt, dass ich es noch in der schule gelernt hab.

und in kenntnis des verfahrens möchte ich einfach mal bezweifeln,
dass ein informationsgewinn in irgendeiner form überhaupt möglich ist.

auf einem bestimmten Raum (DINA4-blatt) lassen sich so viele Informationen speichern,
wie die Geräte zum Lesen und Schreiben ihre Auflösung besitzen.
ob diese Information später als 2D- oder als 3D-Erscheinung interpretiert wird,
ist dabei für die enthaltene Informationsmenge völlig bedeutungslos.
Zuletzt geändert von Kaeru Gaman am 07.03.2007 15:31, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Ich habe einen 600 dpi-Drucker, ein DINA4-Blatt hat 8.2 x 11.6 inch, somit:
8.2 * 600 * 11.6 * 600 = 34.243.200 Bildpunkte.
Mit schwarz/weiss-Druck hätten wir also ca. 34 MB Datenmenge.
Um auf 3,4 GigaByte zu gelangen, müsste jeder Bildpunkt 100 verschiedene Farbwerte annehmen können.

Das ganze ist also zumindest im grober Näherung möglich.
Probleme sind Farbveränderungen, Farbverläufe zwischen Nachbarpunkten, Druckerstreifen bei Tintenstrahlern, etc. etc.

Irgendein komisches Verfahren, bei dem man sogar noch Kreise in verschiedenen Farben sehen kann wird aber stets eine geringere Informationsdichte aufweisen als die wo jeder Bildpunkt unabhängig von den anderen gesetzt werden kann.

Naja, hat alles in allem nicht mehr soo viel mit Leonhards Chiffre zu tun - oder vielleicht doch ? (Chiffre: Drucke Nachricht auf DINA4 aus, scanne wieder ein und brenne als CD mit CD-Text, dieser ist dann der Chiffretext)
!UD2
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Der typ hat Form und Farbe zur Datenspeicherung benutzt,
allerdings wird das verfahren von anderen Wissenschaftlern
angezweifelt weil bis jetzt niemand unabhängiges es testen konnte.

Für die sinnvolle Datenspeicherung ist es, wie ich finde, nur begrenzt geeignet.
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Hmm... man müsste dann doch das Papier ohne Ränder bedrucken. Das heißt aber auch das Papier muss zwangsweise richtig eingezogen werden im Drucker. Ein kleiner dot reicht aus und die Daten sind Müll. Wenns natürlich mit Ränder gedruckt wird und es automatisch die Rotation erkennt, dann ist es prima. Der Rest ist ja auch allzu schwer.

[EDIT]
Und was wenn jetzt ne Falte in dem Papier ist und der Scanner die miteinscannt? Man sollte auf jeden Fall nur eine geringe anzahl von Farben verwenden.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Ich habe einen 600 dpi-Drucker, ein DINA4-Blatt hat 8.2 x 11.6 inch, somit:
8.2 * 600 * 11.6 * 600 = 34.243.200 Bildpunkte.
Mit schwarz/weiss-Druck hätten wir also ca. 34 MB Datenmenge.
nein. mit s/w ist jeder bildpunkt 1 bit.
34.243.200 / 8 = 2.480.400 byte

wenn man 256 farben/grautöne verwendet, ist jeder bildpunkt ein byte,
womit du dann wirklich 34.243.200 bytes hättest.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Oh! <vor die Stirn klatsch> Da habe ich wohl Faktor 8 vergessen. Naja, solange der Fehler noch durch eine Konstante beschrieben werden kann ist es ja nicht so tragisch :wink:

Also nehmen wir an wir haben 34.243.200 Bytes, indem jeder Bildpunkt 256 Farben/Grautöne hat. (Und Fehler wie durch Knittern, Farbunechtheiten, etc. vernachlässigt):
Jedes Verfahren, welches irgendwelche bunten Kreise malt, oder andere geometrische Figuren erkennen lässt, ist schlechter, als eines, dass einfach jeden Bildpunkt unabhängig von den anderen setzt.
Denn jedes solche Bild mit geometrischen Mustern ist auch in der Menge der durch unabhängige Punkte malbare Bilder enthalten. Aber die meisten der unabhängigen Punktbilder sind nicht in der Menge der geometrisch erkennbaren Muster. Damit sind die geometrischen Muster nur eine winzige Teilmenge sämtlicher Punktbilder. Also wäre ein Verfahren, bei dem man noch Muster erkennt, völlige Platzverschwendung.

Vielleicht sind die geometrischen Formen aber auch notwendig, um die Unzulänglichkeiten durch Knittern, Farbvermischungen von Nachbarpunkten, etc. auszugleichen, dabei wird aber die darstellbare Datenmenge enorm schrumpfen, von den 34MB vielleicht (so aus dem Bauch raus) auf 10kByte. (Also bspw: Es werden auf dem Papier 10.000 Kreise, Rechtecke, etc. in verschiedenen Farben gemalt bei 1 Byte Farbauflösung). Aber auch dass wäre dann ein beklopptes Verfahren. Der 2D-Barcode von z.B. der Bahn auf den Online-Tickets dürfte da bereits besser funktionieren.
!UD2
Benutzeravatar
bernd
Beiträge: 165
Registriert: 06.09.2004 08:02
Wohnort: Paderborn (PB)

Beitrag von bernd »

Jedes Verfahren, welches irgendwelche bunten Kreise malt, oder andere geometrische Figuren erkennen lässt, ist schlechter, als eines, dass einfach jeden Bildpunkt unabhängig von den anderen setzt.
Ich verstehe das so, dass die geometrischen Figuren für eine Kompression
der Daten notwendig sind. Wie schon vorher gezeigt kann man mit
600 dpi und 256 Farben ca. 32 MB auf einem DIN A 4 Blatt darstellen. Um
an die 256 GB zu kommen müsste mit einer hohen Farbtiefe und/oder einer
sehr hohen Auflösung gearbeitet werden, was die Fehlerquote beim Druck
und scannen erhöht.

Knicken darf man den Papierdatenträger natürlich nicht, aber auch
eine Diskette, CD, DVD ist mit einer Falte unbrauchbar
:wink:

Warten wir mal ab was daraus wird. Interessant ist es auf jeden Fall.

bis bald bernd
"Seid gegrüsst Programme!"
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

hier noch ein paar links..
die beiden news-artikel:
http://www.arabnews.com/?page=4&section ... =11&y=2006
http://arstechnica.com/news.ars/post/20061126-8288.html

hier meldet sich Sainul Abideen persönlich in einem forum (nickname: Sainu)
um auf missverständnisse einzugehen:
http://episteme.arstechnica.com/eve/for ... 812831/p/5
dort gibt er auch diesen link:
http://www.kerlontech.com/RandD.html
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

OK. Hier ist meine Verschlüsselung.
Mal sehen, ob jemand es schafft, einen Password-Ausleser zu basteln:

Code: Alles auswählen

EnableExplicit

#Gay_Data=4
#Gay_Elementar=2
#Gay_Char=$100

#Gay_Pass_Added_i = 2
#Gay_Pass_Added_t = 4
#Gay_Pass_o = $100
#Gay_Pass_i = 2
#Gay_Pass_t = 4

Structure Gay_elementar
  c.c[#Gay_Char]
EndStructure

Structure Gay_data
  elementar.Gay_elementar[#Gay_Elementar]
EndStructure

Structure Gay
  gData.Gay_data[#Gay_Data]
EndStructure

Structure Gay_Pass_Added_t
  i.l[#Gay_Pass_Added_i];0,1
EndStructure
Structure Gay_Pass_Added
  t.Gay_Pass_Added_t[#Gay_Pass_Added_t];0,1,2,3
EndStructure
Structure Gay_Pass_t_i
  o.l[#Gay_Pass_o]; 0 - 255
EndStructure
Structure Gay_Pass_t
  i.Gay_Pass_t_i[#Gay_Pass_i]; 0, 1
EndStructure
Structure Gay_Pass
  t.Gay_Pass_t[#Gay_Pass_t]; 0, 1, 2, 3
EndStructure

Enumeration ;Gay_Security
  #Gay_Security_Small = 1 ; Das Passwort wird normal wie eingegeben Angenommen. Nach 255/256 Zeichen wird kein Zeichen mehr eingelesen.
  #Gay_Security_WithHash ; Ein Hashwert wird aus dem Passwort erstellt
  #Gay_Security_WithPatchedHash ; Wie 'WithHash' nur das die Zeichen nicht mehr nahe bei einander liegen.
EndEnumeration

Prototype.l __CryptGay_PasswordCallback(tData.b, ielementar.b, obit.b, h, sHash.s)
Procedure.l __CryptGay_CreatePassword(sPassword.s, bSecurity, *added.Gay_Pass_Added = #Null, Callback.__CryptGay_PasswordCallback = #Null)
  Protected *pass.Gay_Pass = AllocateMemory(SizeOf(Gay_Pass))
  If bSecurity = #Gay_Security_WithHash Or bSecurity = #Gay_Security_WithPatchedHash
    sPassword=MD5Fingerprint(@sPassword, Len(sPassword)) ;32-Zeichen-Code
    If bSecurity = #Gay_Security_WithPatchedHash
      sPassword=ReplaceString(sPassword, "1", Chr(210), #True)
      sPassword=ReplaceString(sPassword, "2", Chr(225), #True)
      sPassword=ReplaceString(sPassword, "3", Chr(195), #True)
      sPassword=ReplaceString(sPassword, "4", Chr(15), #True)
      sPassword=ReplaceString(sPassword, "5", Chr(30), #True)
      sPassword=ReplaceString(sPassword, "6", Chr(75), #True)
      sPassword=ReplaceString(sPassword, "7", Chr(90), #True)
      sPassword=ReplaceString(sPassword, "8", Chr(60), #True)
      sPassword=ReplaceString(sPassword, "9", Chr(105), #True)
      sPassword=ReplaceString(sPassword, "0", Chr(0), #True)
      sPassword=ReplaceString(sPassword, "a", Chr(135), #True)
      sPassword=ReplaceString(sPassword, "b", Chr(180), #True)
      sPassword=ReplaceString(sPassword, "c", Chr(150), #True)
      sPassword=ReplaceString(sPassword, "d", Chr(165), #True)
      sPassword=ReplaceString(sPassword, "e", Chr(120), #True)
      sPassword=ReplaceString(sPassword, "f", Chr(45), #True)
    EndIf
  EndIf
  Protected lPassLen.l = Len(sPassword)
  
  Protected t.l, i.l, o.l, h.l, lWert.l
  
  If *added = #Null
    *added = AllocateMemory(SizeOf(Gay_Pass_Added))
    *added\t[0]\i[0] = '00'
    *added\t[0]\i[1] = '01'
    *added\t[1]\i[0] = '10'
    *added\t[1]\i[1] = '11'
    *added\t[2]\i[0] = '20'
    *added\t[2]\i[1] = '21'
    *added\t[3]\i[0] = '30'
    *added\t[3]\i[1] = '31'
  EndIf
  
  For t=0 To #Gay_Data-1 ; data
    For i=0 To #Gay_Elementar-1 ; elementar
      For o=0 To #Gay_Char-1 ; bit
        h=o+1 ; Hash-Char
        While h < 1 Or h > lPassLen
          If h < 1
            h+1
          Else
            h-lPassLen
          EndIf
        Wend
        
        If Callback
          lWert = Callback(t, i, o, h, Mid(sPassword, h, 1))
        Else
          lWert='0'*(Asc(Mid(sPassword, h, 1))+h)
        EndIf
        
        ;{ Sicherung von der Fehlermeldung: 'Modulo zero is forbidden (result in a zero divide).'
        If lWert = 0
          lWert = -1
        EndIf
        ;}
        
        lWert = *added\t[t]\i[i] + lWert
        
        *pass\t[t]\i[i]\o[o] = lWert
      Next o
    Next i
  Next t
  
  ProcedureReturn *pass
EndProcedure

Procedure.b CryptGay(*InputBuffer, *OutputBuffer, InputBufferLen, Password.s, bSecurity.b = #Gay_Security_WithPatchedHash, *pass.Gay_Pass = #Null) ; Verschlüssler
  Protected NewList gay.Gay()
  Protected l.l, i.l, t.l, o.l
  Protected sOutput.s
  If *pass.Gay_Pass = #Null
    *pass.Gay_Pass = __CryptGay_CreatePassword(Password, bSecurity)
  EndIf
  
  For l = 1 To InputBufferLen Step 4*2*256 ; data*elementar
    AddElement(gay())
    For t = 0 To #Gay_Data-1 ; data
      For i = 0 To #Gay_Elementar-1 ; elementar
        For o = 0 To #Gay_Char-1 ; bit
          gay()\gData[t]\elementar[i]\c[o]=PeekC(*InputBuffer+t*i*o)
        Next o
      Next i
    Next t
  Next l
  
  Protected l1.l, lkey.l, a, b, c
  ForEach gay()
    For t = 0 To #Gay_Data-1 ; data
      For i = 0 To #Gay_Elementar-1 ; elementar
        For o = 0 To #Gay_Char-1 ; bit
          l1 = *pass\t[t]\i[i]\o[o]
          
          gay()\gData[t]\elementar[i]\c[o] = l1 / (o-$100) - gay()\gData[t]\elementar[i]\c[o]
        Next o
      Next i
    Next t
  Next gay()
  
  ForEach gay()
    For t = 0 To #Gay_Data-1 ; data
      For i = 0 To #Gay_Elementar-1 ; elementar
        For o = 0 To #Gay_Char-1 ; bit
          If t*i*o >= InputBufferLen
            Break 4
          EndIf
          PokeC(*OutputBuffer+t*i*o, gay()\gData[t]\elementar[i]\c[o])
        Next o
      Next i
    Next t
  Next gay()
  
  ProcedureReturn #True
EndProcedure

Define String.s = "- MC-1162104643.1497713503.0-Co -"
Debug String + "#INPUT"
Define lTime.l

Define Output.s = Space(Len(String))

lTime = ElapsedMilliseconds()
CryptGay(@String, @Output, Len(String), "CrazyFrog")
Debug Output + "#VERSCHLÜSSELT"
Debug ElapsedMilliseconds()-lTime

Define String2.s = Space(Len(String))
lTime = ElapsedMilliseconds()
CryptGay(@Output, @String2, Len(Output), "CrazyFrog")
Debug String2 + "#ENTSCHLÜSSELT"
Debug ElapsedMilliseconds()-lTime
Antworten