Skip to content

vvsalash/Elliptic_Curves

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Elliptic_Curves

https://codeforces.com/contestInvitation/0130ff83d95671be5f529a9bc8b23dda0abd1445

A. Шифрование с помощью $\mathbb{Z}_p^*$

В данной задаче необходимо зашифровывать сообщения с помощью схемы Эль-Гамаля над циклической подгруппой ℤ∗𝑝

Входные данные

В первой строке входного файла содержится три числа:

1≤𝑝≤232−1

— модуль группы;

𝑔∈ℤ∗𝑝

— генератор циклической подгруппы;

𝑘∈⟨𝑔⟩

— публичный ключ.

Во второй строке записано шифруемое сообщение, состоящее из строчных и прописных букв латиницы, пробелов, арабских цифр и точек. На самом деле это число, записанное в 64-ричной системе счисления в little-endian. Процедуру получения численного значения из символа можно посмотреть здесь: https://pastebin.com/pE8iecyg. Для получения шифруемой последовательности нужно записать это число в p-ичной системе счисления в little-endian. Выходные данные

Каждую пару чисел, полученную после шифрования, нужно вывести на своей строчке, сначала степень генератора, затем кусочек сообщения с солью.

B. Расшифровка с помощью $\mathbb{Z}_p^*$

В данной задаче необходимо расшифровывать сообщения с помощью схемы Эль-Гамаля над циклической подгруппой ℤ∗𝑝

. Входные данные

В первой строке входного файла содержится два числа:

1≤𝑝≤232−1

— модуль группы;

1≤𝑘<𝑝−12

— приватный ключ.

В последующих строках записаны пары чисел, шифрующие сообщение (каждая пара на своей строчке, сначала степень генератора, потом кусочек сообщения с солью). Выходные данные

После расшифровки вы получите запись числа в p-ичной системе счисления в little-endian. Нужно вывести его запись в 64-чной системе в little-endian, где цифрами являются строчные и прописные буквы латиницы, арабские цифры, точка и пробел. Процедуру получения численного значения из символа можно посмотреть здесь: https://pastebin.com/pE8iecyg, обратите её.

C. Шифрование с помощью $\mathbb{F}_q^*$

В данной задаче необходимо зашифровывать сообщения с помощью схемы Эль-Гамаля над циклической подгруппой 𝔽∗𝑞

. Входные данные

В первой строке входного файла содержится 1≤𝑝≤232−1 — модуль поля ℤ𝑝

.

Во второй строке через пробел перечислены коэффициенты 𝑓0,𝑓1,…,𝑓𝑛 неприводимого многочлена 𝑓=𝑓0+𝑓1𝑥+⋯+𝑓𝑛𝑥𝑛 над ℤ𝑝, где −𝑝<𝑓𝑖<𝑝

.

В третьей строке перечислены коэффициенты многочлена 𝑔 — генератора циклической подгруппы 𝔽𝑝[𝑥]/𝑓, где −𝑝<𝑔𝑖<𝑝

.

В четвёртой строке перечислены коэффициенты многочлена 𝑘 — публичного ключа шифрования, где −𝑝<𝑘𝑖<𝑝

.

В пятой строке записано шифруемое сообщение, состоящее из строчных и прописных букв латиницы, пробелов, арабских цифр и точек. На самом деле это число, записанное в 64-ричной системе счисления в little-endian. Процедуру получения численного значения из символа можно посмотреть здесь: https://pastebin.com/pE8iecyg. Для получения шифруемой последовательности нужно записать это число в p-ичной системе счисления в little-endian и разбить эту запись на блоки длины 𝑛 . Каждый блок содержит в себе коэффициенты 𝑎0,…,𝑎𝑛−1 элемента группы 𝔽∗𝑝𝑛

. Выходные данные

Коэффициенты многочленов, полученные в результате шифрования, каждый на своей строчке, в каждой паре нужно вывести сначала степень генератора, а затем кусочек сообщения с солью. Для нулевого многочлена допускается вывести пустую строчку.

D. Расшифровка с помощью $\mathbb{F}_q^*$

В данной задаче необходимо расшифровывать сообщения с помощью схемы Эль-Гамаля над циклической подгруппой 𝔽∗𝑞

. Входные данные

В первой строке входного файла содержится 1≤𝑝≤232−1 — модуль поля ℤ𝑝

.

Во второй строке через пробел перечислены коэффициенты 𝑓0,𝑓1,…,𝑓𝑛 неприводимого многочлена 𝑓=𝑓0+𝑓1𝑥+⋯+𝑓𝑛𝑥𝑛 над ℤ𝑝, где −𝑝<𝑓𝑖<𝑝

.

В третьей строке записан 𝑘

— приватный ключ.

В последующих строках записаны многочлены, шифрующие сообщение, каждый на своей строке, сначала степень генератора, затем кусок сообщения с солью. Выходные данные

После конкатенации расшифрованных массивов коэффициентов вы получите запись числа в p-ичной системе счисления в little-endian. Нужно вывести его запись в 64-чной системе в little-endian, где цифрами являются строчные и прописные буквы латиницы, арабские цифры, точка и пробел. Процедуру получения численного значения из символа можно посмотреть здесь: https://pastebin.com/pE8iecyg, обратите её.

E. Шифрование с помощью NIST P-256

В данной задаче необходимо зашифровывать сообщения с помощью схемы Эль-Гамаля над кривой NIST P-256.

Параметры кривой:

Поле ℤ𝑝 , где 𝑝=2256−2224+2192+296−1

.

Уравнение кривой 𝑦2=𝑥3−3𝑥+41058363725152142129326129780047268409114441015993725554835256314039467401291

.

Генератор: точка (𝑥,𝑦)

, где

𝑥=48439561293906451759052585252797914202762949526041747995844080717082404635286

𝑦=36134250956749795798585127919587881956611106672985015071877198253568414405109

Порядок группы:

115792089210356248762697446949407573529996955224135760342422259061068512044369

. Входные данные

В первой строке записаны координаты публичного ключа через пробел.

Во второй строке записано число 𝑛<100

.

В последующих 𝑛 строках записаны 𝑥-координаты точек, которые требуется зашифровать, в 64-ричной системе счисления в little-endian (алфавит такой же, как в предыдущих задачах, только вместо пробела — нижнее подчёркивание, _). Гарантируется, что существует такой 𝑦, что (𝑥,𝑦) лежит на кривой; вам подойдёт любой такой 𝑦

. Выходные данные

Последовательность пар точек, задающих зашифрованное сообщение, каждая точка на своей строчке, сначала степень генератора, затем кусочек сообщения с солью.

Если точка — 

, выведите Z.

Иначе выведите её координаты через пробел.

Если какие-то из выведенных точек не лежат на кривой, будет выдан вердикт PE.

F. Расшифровка с помощью NIST P-256

В данной задаче необходимо расшифровывать сообщения с помощью схемы Эль-Гамаля над кривой NIST P-256.

Параметры кривой:

Поле ℤ𝑝 , где 𝑝=2256−2224+2192+296−1

.

Уравнение кривой 𝑦2=𝑥3−3𝑥+41058363725152142129326129780047268409114441015993725554835256314039467401291

. Входные данные

В первой строке записан 1≤𝑘<ord(𝑔)

— приватный ключ.

Во второй строке записано число 𝑛<1000

.

В последующих 2𝑛

строках записаны пары точек, шифрующих сообщение, каждая точка на своей строчке, сначала степень генератора, затем кусочек сообщения с солью.

Если точка — 

, будет написано Z.

Иначе будут записаны координаты точки. Выходные данные

Нужно вывести 𝑥

-координаты зашифрованных точек в little-endian в 64-ричной системе счисления (алфавит такой же, как в предыдущей задаче), каждую на своей строчке.

About

Solving tasks about elliptic curves

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages