Codebreaker und Codewriters


18

Angenommen, Sie haben Text und möchten, dass er an Ihren Freund gesendet wird, aber Sie möchten nicht, dass er von einem anderen gelesen wird. Das bedeutet wahrscheinlich, dass Sie es verschlüsseln möchten, damit nur Sie und Ihr Freund es lesen können. Es gibt jedoch ein Problem: Sie und Ihr Freund haben vergessen, sich auf eine Verschlüsselungsmethode zu einigen. Wenn Sie ihnen eine Nachricht senden, können sie diese nicht entschlüsseln.

Nachdem Sie eine Weile darüber nachgedacht haben, senden Sie Ihrem Freund einfach den Code, um Ihre Nachricht zusammen mit der Nachricht zu verschlüsseln. Ihr Freund ist sehr klug und kann daher wahrscheinlich anhand der Verschlüsselungsmethode herausfinden, wie die Nachricht entschlüsselt werden kann.

Natürlich möchten Sie ein Verschlüsselungsschema auswählen, das es so schwer wie möglich macht, die Nachricht zu knacken, da möglicherweise andere Personen die Nachricht lesen (Entschlüsselungsschema herausfinden).

Aufgabe der Polizei

In dieser Herausforderung übernimmt Cops die Rolle des Autors: Sie entwerfen ein Verschlüsselungsschema, das Zeichenfolgen in Zeichenfolgen konvertiert. Dieses Verschlüsselungsschema muss jedoch bijektiv sein . Das bedeutet, dass keine zwei Zeichenfolgen einer anderen Zeichenfolge zugeordnet werden müssen und jede Zeichenfolge von einer Eingabe zugeordnet werden kann. Es darf nur eine Eingabe erforderlich sein - die zu codierende Zeichenfolge.

Anschließend veröffentlichen Sie einen Code, der die Verschlüsselung ausführt, sowie eine einzelne Nachricht, die mit dem von Ihrem Code angegebenen Schema verschlüsselt wurde.

Da Sie für das Senden von Nachrichten byteweise zahlen, entspricht Ihre Punktzahl der Länge Ihres Codes plus der Länge des Chiffretexts . Wenn Ihre Antwort geknackt ist, haben Sie eine Punktzahl von unendlich.

Nach einer Woche können Sie den Text anzeigen und Ihre Antwort als sicher markieren . Sichere Antworten sind solche, die nicht geknackt werden können.

Aufgabe der Räuber

Räuber spielen entweder als Freund des Schriftstellers oder als böswilliger Mittelsmann (es gibt keinen materiellen Unterschied, aber Sie können Rollenspiele spielen, als ob es mehr Spaß macht, dies zu tun). Sie nehmen die Verschlüsselungsschemata und den Chiffretext und versuchen, die verschlüsselte Nachricht herauszufinden. Sobald sie die verschlüsselte Nachricht herausgefunden haben, veröffentlichen sie sie in einem Kommentar. (Für diese Frage wird es keinen separaten Räuber-Thread geben.)

Gewinner ist der Räuber mit den meisten Rissen.


Hier ist ein Beispiel, wie eine geknackte Lösung aussehen könnte:

Kaufen Sie mehr Orangen


Wenn die Kodierung bijektiv ist, wie lauten die Domäne und die Kodomäne?
Undichte Nonne

Die Saiten mit welchen Zeichen?
Undichte Nonne

1
@ WheatWizard Welche 256? Du meinst 256 Bytes, keine Zeichen, oder?
Erik der Outgolfer

7
Was hindert jemanden daran, eine kryptografisch sichere Funktion zu verwenden?
Tutleman

2
Wem obliegt es, die Bijektivität zu beweisen: dem Polizisten oder potenziellen Räubern? Dh wenn es nicht bekannt ist, ob eine Funktion bijektiv ist, was passiert dann?
Stephen

Antworten:


5

Jelly , 57 + 32 = 89 Bytes ( geknackt )

“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Verschlüsselte Nachricht:

EªæBsÊ$ʳ¢?r×­Q4e²?ò[Ý6

Als Hex-Zeichenfolge:

4518AAE6421973CA
9724CAB3A23F72D7
AD18855134651810
B23F1CF25BDD9036

Erläuterung:

O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *21           map each to its 21th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

Wo Nwird durch die Zeichenfolge codiert “¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’, die die Nummer ist 105587021056759938494595233483151378724567978408381355454441180598980268016731.

Dies ist auch die RSA-Methode mit Noben angegebenem und öffentlichem Schlüssel 21. Dies zu knacken ist gleichbedeutend mit dem Finden der beiden Primfaktoren von N.


Gut. Ich kann meine eigene verschlüsselte Nachricht mit dem Schlüssel entschlüsseln, den ich gefunden habe, aber es scheint mit Ihrer fehlzuschlagen. : - / (Das erwartete Ergebnis ist keine 4-stellige nicht-englische Nachricht, oder?)
Arnauld

3
Die Nachricht lautet _ìNb( Online ausprobieren! ).
Anders Kaseorg

@AndersKaseorg Yup. Das war es, was ich hatte, aber ich hatte etwas Bedeutenderes erwartet. :-)
Arnauld

1
Für was es wert ist , hier ist der Code , den ich auf meiner Seite verwendet.
Arnauld

1
@AndersKaseorg Jelly versucht, seine Argumente auszuwerten, daher sind in der Tat Null-Bytes möglich. tio.run/##y0rNyan8/9//////6jEGIKgOAA
Dennis

5

Jelly , 88 + 64 = 152 Bytes

Verschlüsselungsfunktion:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

Verschlüsselte Nachricht:

AX!?ÖÍL¹    JÓ°û0àah4Û{µÌá`
^tÝrRÕù#êwðãTÓK"Íû´Ëß!øòOf«

Als Hex-Zeichenfolge:

9F419458213FD6CD4CB9094A10D3B0FB
8F30E0616834DB7BB517CCE1600A5E74
DD7252D5F923EA77F0E354D34B9F22CD
FB80B4CBDF21F80E94F24F9A66AB9112

Erläuterung:

O‘ḅ256b¢*13%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *13           map each to its 13th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

Wo Nist die Zeichenfolge codiert:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’

Welches ist die Nummer

15465347049748408180402050551405372385300458901874153987195606642192077081674726470827949979631079014102900173229117045997489671500506945449681040725068819

Dies ist auch die RSA-Methode mit Noben angegebenem und öffentlichem Schlüssel 13. Dies zu knacken ist gleichbedeutend mit dem Finden der beiden Primfaktoren von N, die 512 Bits haben.



Ich bin mir sicher, dass ich mit diesem wunderbaren Programm Ihre Lösung ein paar Jahrtausende nach dem heißen Tod des Universums knacken kann.
Socratic Phoenix

@SocraticPhoenix-Faktorisierung durch Versuchsteilung kann niemals in die Nähe eines quadratischen Siebs kommen.
Undichte Nonne

@LeakyNun Ich verstehe Ihre großen mathematischen Wörter nicht ...
Socratic Phoenix

@SocraticPhoenix Ihr Programm versucht jeden Faktor von 2, während quadratisches Sieb viel schneller ist. Es kann eine 256-Bit-Halbwertszeit in 6 Minuten faktorisieren, während Ihr Programm eine Ewigkeit gedauert hätte.
Undichte Nonne

3

JavaScript (ES6), 43 + 33 = 76 Bytes von Leaky Nun geknackt

Verschlüsselungsfunktion, 43 Bytes:

s=>[...s].sort(_=>Math.cos(i++),i=0).join``

Verschlüsselte Nachricht, 33 Bytes:

Hinweis: Diese Verschlüsselungsmethode ist browserabhängig.

FireFox: "ty a)s kaasoeocr!hTt; o s  -cwaoo"
Chrome : "oht aasoaoas   e)tosr;oky c!-cw T"
Edge   : "tskso ;- caroteoTha wa soo ay c!)"

T! a)o khas eotrto-c; o sa cwsaoy
Undichte Nonne

@LeakyNun Err ... nein.
Arnauld

Was bringt meine Antwort stattdessen?
Undichte Nonne

Welchen Browser benutzen Sie? Ich benutze Chrome.
Undichte Nonne

6
That was soooo easy to crack! -;)(Ich habe Firefox verwendet, um es zu knacken)
Undichte Nonne

3

Braingolf, Gebrochen

(d1&,&g)&@

Probieren Sie es online!

Verschlüsselte Nachricht, 45 Bytes (UTF-8)

°Áݭїϳ{ًչםק{їϳэÁק{|э³קѡ|

Hexcodes der verschlüsselten Nachricht

C2 B0 C3 81 DD AD D1 97 CF
B3 C2 90 7B D9 8B D5 B9 D7
9D D7 A7 7B D1 97 CF B3 D1
8D C3 81 D7 A7 7B 7C D1 8D
C2 B3 D7 A7 D1 A1 7C C2 85

Entschlüsselte Nachricht

C'mon, this one's *easy*!

Erläuterung

(d1&,&g)&@  Implicit input from commandline args
(......)    Foreach loop, foreach codepoint of input
 d          Split into digits
  1         Push 1
   &,       Reverse
     &g     Concatenate
        &@  Print

Decoder

Ein Decoder kann durch Ändern von nur 3 Zeichen erstellt werden. Einfach entfernen 1und $_zwischen &,und einfügen&g

(d&,$_&g)&@

Können Sie einen TIO bereitstellen?
Kritixi Lithos

1
C'mon, this one's *easy*!
KSmarts

@KSmarts Richtig!
Skidsdev

gist undokumentiert?
Undichte Nonne

Ist das bijektiv?
Undichte Nonne

3

JavaScript (ES6), 96 + 9 = 105 Byte

q=>Buffer(q).map((a,i,d)=>d[i-1]^Math.abs(1e16*Math.sin(d[i]+i))%255).sort((a,i)=>Math.tan(a*i))

Chiffretext (hexadezimal codiert): 7d111c74b99faff76a

Probieren Sie es online!

Beispielausgaben (mit V8-Engine):

abc123 -> db48ea4f86b9

Hallo -> 1b3420f5ab


Ungültige Übermittlung: Mehrere Klartexte generieren denselben Chiffretext. Zum Beispiel: "C", "D". Dies gilt nur für den ersten Buchstaben. Von den 256 möglichen Eingaben nur 165 eindeutige Ausgaben.
Mark Jeronimus

Es ist bijektiv für den beabsichtigten Bereich (ASCII A bis ASCII z)
gültig für den

Ich habe dir nur gesagt, dass es nicht so ist. Probieren Sie einfach Ihren Code mit "C" bzw. "D" als Eingabezeichenfolge aus. Gleiche Ausgabezeichenfolge 76.
Mark Jeronimus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.