Tracks
/
Cairo
Cairo
/
Übungen
/
Kryptograf
Kryptograf

Kryptograf

Lernübung

Einführung

In Cairo begegnet dir als eines der zentralen Konzepte der Typ felt252, auch bekannt als Körperelement. Dieser Typ repräsentiert Ganzzahlen innerhalb eines bestimmten Bereichs, der durch eine große Primzahl $P$ festgelegt ist. In dieser Übung arbeitest du ausschließlich mit dem Typ felt252, der ein wesentlicher Bestandteil der Programmierung mit Cairo ist.

Der Typ felt252 in Cairo ist ein skalarer Typ, mit dem sich Ganzzahlen von 0 bis $P - 1$ darstellen lassen, wobei $P$ eine große Primzahl ist, die derzeit auf $( 2^{251} + 17 \cdot 2^{192} + 1 )$ gesetzt ist. Dieser Typ sorgt dafür, dass alle Rechenoperationen modulo $P$ ausgeführt werden, was ihn von den Standard-Ganzzahltypen unterscheidet, die dir in anderen Programmiersprachen begegnen können.

Cairo unterstützt grundlegende Rechenoperationen mit felt252-Werten:

  • Addition (+): Addiert zwei felt252-Werte. Wenn das Ergebnis $P$ überschreitet, wird es modulo $P$ reduziert.
  • Subtraktion (-): Subtrahiert einen felt252-Wert von einem anderen. Wenn das Ergebnis negativ ist, wird es angepasst, um im Bereich zu bleiben, indem ein Vielfaches von $P$ addiert wird.
  • Multiplikation (*): Multipliziert zwei felt252-Werte, wobei das Ergebnis modulo $P$ berechnet wird.
  • Division (/): Dividiert einen felt252-Wert durch einen anderen und stellt dabei sicher, dass das Ergebnis die Gleichung $( \frac{x}{y} \cdot y = x \mod P)$ erfüllt.

Anleitung

In dieser Übung hilfst du dabei, ein sicheres Kommunikationssystem zu verwalten und zu überprüfen. Das System stützt sich stark auf Körperelemente, genauer gesagt auf den Typ felt252 in Cairo, um sicherzustellen, dass alle arithmetischen Operationen innerhalb eines festgelegten Bereichs bleiben.

1. Berechne die Summe zweier Nachrichten

Zwei verschlüsselte Nachrichten, jede durch ein felt252 dargestellt, müssen addiert werden, um eine kombinierte Nachricht zu erzeugen. Aufgrund der Verschlüsselung muss jedoch jedes Ergebnis, das den Maximalwert $P - 1$ überschreitet, mithilfe von Modulo $P$ zurückgeführt werden.

Implementiere eine Funktion, die zwei felt252-Werte entgegennimmt und ihre Summe zurückgibt, wobei das Ergebnis im gültigen Bereich bleiben muss:

add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789

Hinweis: Der Rückgabewert sollte ein felt252 sein.

2. Berechne die Differenz zweier Nachrichten

Manchmal müssen Nachrichten subtrahiert werden, um die ursprünglichen Daten wiederzugewinnen. Ist das Ergebnis der Subtraktion negativ, passt das System es automatisch an, indem es $P$ addiert, um es wieder in den Wertebereich eines gültigen felt252-Werts zu bringen.

Implementiere eine Funktion, die zwei felt252-Werte entgegennimmt und ihre Differenz zurückgibt, wobei das Ergebnis im gültigen Bereich bleiben muss:

subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949

Hinweis: Der Rückgabewert sollte ein felt252 sein.

3. Berechne ein gültiges Produkt zweier Nachrichten

Um die Integrität verschlüsselter Daten zu gewährleisten, multipliziert das kryptografische System oft zwei Nachrichten (felt252), damit ihr Produkt in einem gültigen Bereich bleibt. Das Ergebnis muss modulo $P$ berechnet werden, damit es im gültigen Bereich bleibt.

Implementiere eine Funktion, die zwei felt252-Werte entgegennimmt und ihr Produkt zurückgibt, wobei das Ergebnis im gültigen Bereich bleiben muss:

multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789

Hinweis: Der Rückgabewert sollte ein felt252 sein.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Cairo Exercism

Bereit, mit Kryptograf zu starten?

Melde dich bei Exercism an, um Cairo mit 25 Konzepte68 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.