Track
/
Cairo
Cairo
/
Esercizi
/
Crittografo
Crittografo

Crittografo

Esercizio di apprendimento

Introduzione

In Cairo, uno dei concetti fondamentali che incontrerai è il tipo felt252, noto anche come elemento di campo. Questo tipo rappresenta numeri interi all'interno di un intervallo specifico definito da un grande numero primo $P$. In questo esercizio lavorerai esclusivamente con il tipo felt252, che è una parte essenziale della programmazione in Cairo.

Il tipo felt252 in Cairo è un tipo scalare usato per rappresentare numeri interi da 0 fino a $P - 1$, dove $P$ è un grande numero primo attualmente impostato a $( 2^{251} + 17 \cdot 2^{192} + 1 )$. Questo tipo garantisce che tutte le operazioni aritmetiche vengano eseguite modulo $P$, il che lo rende diverso dai tipi interi standard che potresti incontrare in altri linguaggi di programmazione.

Cairo fornisce il supporto per le operazioni aritmetiche di base sui valori felt252:

  • Addizione (+): somma due valori felt252. Se il risultato supera $P$, viene ridotto modulo $P$.
  • Sottrazione (-): sottrae un valore felt252 da un altro. Se il risultato è negativo, viene corretto per rimanere nell'intervallo aggiungendo un multiplo di $P$.
  • Moltiplicazione (*): moltiplica due valori felt252, con il risultato calcolato modulo $P$.
  • Divisione (/): divide un valore felt252 per un altro, assicurando che il risultato soddisfi l'equazione $( \frac{x}{y} \cdot y = x \mod P)$.

Istruzioni

In questo esercizio aiuterai un crittografo a gestire e verificare un sistema di comunicazione sicuro. Il sistema si basa fortemente sugli elementi di campo, in particolare sul tipo felt252 di Cairo, per garantire che tutte le operazioni aritmetiche restino all'interno di un intervallo definito.

1. Calcola la somma di due messaggi

Due messaggi cifrati, ognuno rappresentato come un felt252, devono essere sommati per creare un messaggio combinato. Tuttavia, a causa della cifratura, qualsiasi risultato che superi il valore massimo $P - 1$ deve essere riportato all'interno dell'intervallo usando il modulo $P$.

Implementa una funzione che prende in input due valori felt252 e restituisce la loro somma, assicurandoti che il risultato resti nell'intervallo valido:

add_messages(3618502788666131213697322783095070105623107215331596699973092056135007822949, 987654321)
// => 123456789

Nota: Il valore restituito deve essere un felt252.

2. Calcola la differenza tra due messaggi

A volte i messaggi devono essere sottratti per recuperare i dati originali. Se il risultato della sottrazione è negativo, il sistema lo corregge automaticamente aggiungendo $P$ per riportarlo all'interno dell'intervallo di un valore felt252 valido.

Implementa una funzione che prende in input due valori felt252 e restituisce la loro differenza, assicurandoti che il risultato resti nell'intervallo valido:

subtract_messages(123456789, 987654321)
// => 3618502788666131213697322783095070105623107215331596699973092056135007822949

Nota: Il valore restituito deve essere un felt252.

3. Calcola un prodotto valido di due messaggi

Per garantire l'integrità dei dati cifrati, il sistema crittografico moltiplica spesso due messaggi (felt252) per assicurarsi che il loro prodotto resti in un intervallo valido. Il risultato deve essere calcolato modulo $P$ per garantire che rimanga nell'intervallo valido.

Implementa una funzione che prende in input due valori felt252 e restituisce il loro prodotto, assicurandoti che il risultato resti nell'intervallo valido:

multiply_messages(382927772233671078546147897004315551461400594453673204174697055647611, 9449570)
// => 123456789

Nota: Il valore restituito deve essere un felt252.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Cairo Exercism

Vuoi iniziare Crittografo?

Iscriviti a Exercism per imparare e padroneggiare Cairo con 25 concetti68 esercizi e il mentoring di persone reali, tutto gratis.