Kurzusok
/
Cairo
Cairo
/
Feladatok
/
Kriptográfus
Kriptográfus

Kriptográfus

Tanulófeladat

Bevezetés

A Cairo nyelvben az egyik alapvető fogalom, amellyel találkozni fogsz, a felt252 típus, más néven testelem. Ez a típus egy nagy $P$ prímszám által meghatározott tartományba eső egészeket reprezentál. Ebben a feladatban kizárólag a felt252 típussal fogsz dolgozni, amely a Cairo programozás lényeges eleme.

A Cairo nyelvben a felt252 egy skalártípus, amellyel 0-tól $P - 1$-ig terjedő egészeket reprezentálunk, ahol $P$ egy nagy prímszám, amelynek jelenlegi értéke $( 2^{251} + 17 \cdot 2^{192} + 1 )$. Ez a típus biztosítja, hogy minden aritmetikai művelet modulo $P$ történjen, ami megkülönbözteti a más programozási nyelvekben megszokott szabványos egésztípusoktól.

A Cairo támogatja a felt252 értékeken végzett alapvető aritmetikai műveleteket:

  • Összeadás (+): Két felt252 értéket ad össze. Ha az eredmény meghaladja $P$ értékét, akkor modulo $P$ csökken.
  • Kivonás (-): Kivon egy felt252 értéket egy másikból. Ha az eredmény negatív, akkor $P$ egy többszörösének hozzáadásával a tartományon belülre igazítja.
  • Szorzás (*): Összeszoroz két felt252 értéket, az eredményt pedig modulo $P$ számítja ki.
  • Osztás (/): Eloszt egy felt252 értéket egy másikkal, ügyelve arra, hogy az eredmény kielégítse a $( \frac{x}{y} \cdot y = x \mod P)$ egyenletet.

Utasítások

Ebben a feladatban egy kriptográfusnak segítesz egy biztonságos kommunikációs rendszer kezelésében és ellenőrzésében. A rendszer nagy mértékben támaszkodik mezőelemekre, pontosabban a Cairo felt252 típusára, hogy minden aritmetikai művelet egy meghatározott tartományon belül maradjon.

1. Két üzenet összegének kiszámítása

Két titkosított üzenetet, amelyek mindegyike felt252-ként van ábrázolva, össze kell adni, hogy egyesített üzenetet kapjunk. A titkosítás miatt azonban minden olyan eredményt, amely meghaladja a maximális $P - 1$ értéket, a modulo $P$ művelettel kell a megengedett tartományba visszahozni.

Készíts egy függvényt, amely két felt252 értéket kap, és visszaadja az összegüket, biztosítva, hogy az eredmény az érvényes tartományon belül maradjon:

add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789

Megjegyzés: A visszatérési érték felt252 típusú legyen.

2. Két üzenet különbségének kiszámítása

Néha az üzeneteket ki kell vonni egymásból, hogy visszanyerjük az eredeti adatokat. Ha a kivonás eredménye negatív, a rendszer automatikusan hozzáad $P$-t az eredményhez, hogy visszahozza egy érvényes felt252 érték tartományába.

Készíts egy függvényt, amely két felt252 értéket kap, és visszaadja a különbségüket, biztosítva, hogy az eredmény az érvényes tartományon belül maradjon:

subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949

Megjegyzés: A visszatérési érték felt252 típusú legyen.

3. Két üzenet érvényes szorzatának kiszámítása

A titkosított adatok sértetlenségének biztosítása érdekében a kriptográfiai rendszer gyakran összeszoroz két üzenetet (felt252), hogy a szorzatuk érvényes tartományon belül maradjon. Az eredményt modulo $P$ szerint kell kiszámítani, hogy az érvényes tartományon belül maradjon.

Készíts egy függvényt, amely két felt252 értéket kap, és visszaadja a szorzatukat, biztosítva, hogy az eredmény az érvényes tartományon belül maradjon:

multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789

Megjegyzés: A visszatérési érték felt252 típusú legyen.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Cairo Exercism

Készen állsz elkezdeni a(z) Kriptográfus feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Cairo nyelvet 25 fogalom68 feladat segítségével, valódi emberi mentorálással, mindez ingyen.