Помощь в написании студенческих работ
Антистрессовый сервис

Криптография данных

Дипломная Купить готовую Узнать стоимостьмоей работы

Procedure NePozicionnay_Systema_Schislenia.ConvertMSStoPSS (C:ModType; var A: FareaBinary); Function NePozicionnay_Systema_Schislenia.Obratnoe (A:LongInt;Module1:LongInt):LongInt; О. А. Логачёв, А. А. Сальников, С. В. Смышляев, В. В. Mpf_copy (z_float, P_float); // P_float — произведение модулей. Procedure NePozicionnay_Systema_Schislenia.Sub (A:ModType;B:ModType;var C: ModType); Procedure… Читать ещё >

Криптография данных (реферат, курсовая, диплом, контрольная)

Содержание

  • ВВЕДЕНИЕ
  • ГЛАВА 1
    • 1. 1. ОПРЕДЕЛЕНИЕ И НАЗНАЧЕНИЕ КРИПТОСИСТЕМ
    • 1. 2. Криптографическая стойкость
    • ГЛАВА 2. Теоретические и практические основы построения криптосистемы RSA
    • 2. 1. Криптосистема RSA
    • 2. 2. Цифровая подпись RSA
    • 2. 3. Пример работы алгоритма шифрования
    • 2. 4. Криптосистема Эль-Гамаля
    • 2. 5. Криптографическая система Рабина
    • 2. 6. Ранцевая криптосистема Меркла-Хеллмана
    • 2. 7. Разработка программы для RSA-шифрования
    • ЗАКЛЮЧЕНИЕ
    • СПИСОК ЛИТЕРАТУРЫ
    • ПРИЛОЖЕНИЕ 3
    • Приложение 1. Программа факторизации методом Ферма
    • Приложение 2. Демонстрация работы с алгоритмом RSA
  • Рисунок 2.

    7.1 Главное окно программы.

    Рисунок 2.

    7.2 Форма открытия файла Рисунок 2.

    7.3 Диалоговое окно об окончании шифрования Рисунок 2.

    7.4 Форма сохранения файла.

    ЗАКЛЮЧЕНИЕ

    .

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

    Основные результаты работы заключаются в следующем:

    Приведена классификация проблем на трудности решения, которых основанный ряд криптографических алгоритмов.

    Проведён анализ криптосистемы RSA и других криптосистем Разработано программное обеспечение для шифрования методом RSA.

    Перспективным направлением дальнейших исследований является применение эллиптических кривых для шифрования и дешифрования данных.

    Введение

    в криптографию. Под общей редакцией В. В. Ященко. Издание 4-е, дополненное. МЦНМО, М., 2012.

    О. А. Логачёв, А. А. Сальников, С. В.

    Смышляев, В. В. Ященко. Булевы функции в теории кодирования и криптологии. Издание второе, дополненное. МЦНМО, М., 2012.

    Б. Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. Издательство ТРИУМФ, М., 2002.

    Х. К. А. ван Тилборг. Основы криптологии. Профессиональное руководство и интерактивный учебник. Мир, М., 2006.

    Н. П. Варновский. Математическая криптография. Несколько этюдов. Московский университет и развитие криптографии в России. Материалы конференции в МГУ 17−18 октября 2002 г., МЦНМО, М., 2003, с. 98−121.

    O. Goldreich. Foundations of cryptography. Volume 1 (Basic tools). Volume 2 (Basic applications). Cambridge University Press, Cambridge, United Kingdom, 2001 (v. 1), 2004 (v. 2).

    Pseudorandomness and cryptographic applications. Princeton University Press, Princeton, New Jersey, 1996.

    С.М. Авдошин, А. А. Набебин. Дискретная математика. Модулярная алгебра, криптография, кодирование. — М.: ДМК Пресс, 2017. -352 с.

    ПРИЛОЖЕНИЕ Приложение 1. Программа факторизации методом Ферма.

    using System;

    using System.Collections.Generic;

    using System. Linq;

    using System. Text;

    namespace ferma_cons.

    {.

    class Program.

    {.

    static void Main (string[] args).

    {.

    int n = 19 691; // число которое надо разложить.

    int q = 0;

    int x = 1;

    int m = Convert. ToInt32(Math.Truncate (Math.Sqrt (n)));

    int t = 0;

    do.

    {.

    q = (m+x)*(m+x) — n;

    t = Convert. ToInt32(Math.Truncate (Math.Sqrt (q)));

    ++x;

    }.

    while (t*t≠q);

    —x;

    Console.WriteLine («A = «+ (m + x+t).ToString ());

    Console.WriteLine («B = «+ (m + x-t).ToString ());

    Console.ReadLine ();

    }.

    }.

    }.

    Приложение № 2. Демонстрация работы с алгоритмом RSA.

    unit mod_high;

    interface.

    uses.

    mp_types,.

    mp_base,.

    mp_numth,.

    mp_supp,.

    mp_real,.

    SysUtils;

    Const n_module = 20; { number of modules }.

    n_f=5;

    k_f=10;

    Type FareaBinary = record.

    Nom:mp_int;

    por:longint; // 10^por.

    end;

    Type ModType = record.

    arr_module:array [0.n_module] of longint;

    numFloat:mp_float; // budem poka tak delat.

    end;

    type.

    NePozicionnay_Systema_Schislenia=object.

    public.

    Modules:array [0.n_module] of longint;

    P_long:mp_int;

    P_float:mp_float;

    Bazis: array [0.n_module] of mp_int;

    Bazis_float:array [0.n_module] of mp_float;

    Bazis_P_float:array [0.n_module] of mp_float;

    procedure Init;

    procedure Add (A:ModType;B:ModType;var C: ModType);

    procedure Sub (A:ModType;B:ModType;var C: ModType);

    procedure Mul (A:ModType;B:ModType;var C: ModType);

    function IsRound (A:ModType):boolean; {if true then we need round, false not}.

    procedure ConvertPSStoMSS (A:FareaBinary; var C: ModType);

    procedure ConvertMSStoPSS (C:ModType; var A: FareaBinary);

    private.

    // real 2.9e-39.

    1.7e38 11 разрядное число в десятичной системе счисления.

    Function Obratnoe (A:LongInt;Module1:LongInt):LongInt;

    end;

    implementation.

    procedure NePozicionnay_Systema_Schislenia.AddModFloat (MA:ModFloat;MB:ModFloat; var MC: ModFloat);

    var B: double;

    i:word;

    begin.

    if (Ma.por = MB. por).

    then.

    begin.

    Mc.por:=Ma.por;

    MC.mant:=MA.mant+MB.mant;

    end;

    if (Ma.por > MB. por).

    then.

    begin.

    Mc.por:=Ma.por;

    { 10^(Ma.por-MB.por)}.

    {delim mantissu na eto chislo}.

    if (Ma.por-MB.por)>324.

    then.

    begin.

    MC.mant:=MA.mant;

    exit;

    end.

    else.

    begin.

    MC.mant:=(MB.mant/exp ((Ma.por-MB.por)*ln (10)))+MA.mant;

    end;

    end;

    if (Ma.por < MB. por).

    then.

    begin.

    Mc.por:=MB.por;

    { 10^(Ma.por-MB.por)}.

    {delim mantissu na eto chislo}.

    if (MB.por-MA.por)>324.

    then.

    begin.

    MC.mant:=MB.mant;

    exit;

    end.

    else.

    begin.

    MC.mant:=(MA.mant/exp ((MB.por-MA.por)*ln (10)))+MB.mant;

    end;

    end;

    if Abs (MC.mant)>1 then.

    {delim na 10}.

    begin.

    B:=MC.mant;

    i:=0;

    while (abs (B)>=1).

    do.

    begin.

    B:=B*0.1;

    inc (i);

    end;{end of while}.

    MC.por:=Mc.por+i;

    MC.mant:=B;

    exit;

    end; {end of if}.

    if Abs (MC.mant)<0.1 then.

    {umnohaem na 10}.

    begin.

    B:=MC.mant;

    i:=0;

    while (abs (B)<0.1).

    do.

    begin.

    B:=B*10;

    inc (i);

    end;{end of while}.

    MC.por:=MC.por-i;

    MC.mant:=B;

    exit;

    end; {end of if}.

    end; {end of procedure}.

    procedure NePozicionnay_Systema_Schislenia.ConvertPSStoMSS (A:FareaBinary; var C: ModType);

    var i: word;

    j:longint;

    bufLong, Pi_long:mp_int;

    str_temp:string;

    nu, nu2, nu3:longint;

    z64:Int64;

    begin.

    mp_init2(bufLong, bufLong2);

    mp_set_int (bufLong2,Modules[1]); // Set a to a longint.

    mp_mod (A.Nom, bufLong2, bufLong); // Calculate c = a mod b, 0 <= c < b.

    // вычисляем базисы.

    // Bi = (P/Pi)*mi.

    // mi = ((P/Pi) mod Pi)^-1.

    mp_init3(mi_long, nu_long, Pi_long);

    for i:=1 to n_module do begin.

    mp_set_int (Pi_long, Modules[i]);

    mp_mod (A.Nom, Pi_long, bufLong); // bufLong = A. Nom mod Modules[i].

    str_temp:=mp_decimal (bufLong);

    //writeln (str_temp);

    nu:=StrToInt (str_temp); // nu =A.Nom mod Modules[i].

    nu2:=1;

    for j:=1 to por do.

    nu2:= (nu2*10) mod Modules[i]; // nu2 = (10^por) mod Modules[i];

    nu3:=Obratnoe (nu2,Modules[i]); // nu3 = (10^por)^-1 mod Modules[i];

    z64:=Int64(nu3)*Int64(nu);

    C.arr_module[i]: =((z64 mod Modules[i])+Modules[i]) mod Modules[i];

    end;

    // preobrazuem v mp_float.

    mpf_set_default_prec (120); // k primeru.

    {for i:=1 to n_module do.

    C[i]: =A mod modules[i]; }.

    end;

    procedure NePozicionnay_Systema_Schislenia.ConvertMSStoPSS (C:ModType; var A: FareaBinary);

    var i: word;

    Ci_long, z_long, z2_long, Sum_long, nu_long:mp_int;

    str_temp:string;

    nu:Longint;

    begin.

    {mp_init3(Sum_long, Ci_long, z_long);

    mp_init2(z2_long, nu_long);

    mp_set_int (Sum_long, 0);

    for i:=1 to n_module do.

    begin.

    mp_set_int (Ci_long, C[i]);

    mp_mul (Ci_long, Bazis[i], z_long); // c[i]*B[i].

    mp_add (z_long, Sum_long, z2_long);

    mp_copy (z2_long, Sum_long); // sum = sum + c[i]*B[i].

    end;

    //C[i]: =A mod modules[i];

    mp_mod (Sum_long, P_long, nu_long);

    str_temp:=mp_decimal (nu_long);

    nu:=StrToInt (str_temp);

    A:=nu;}.

    end;

    Function NePozicionnay_Systema_Schislenia.Obratnoe (A:LongInt;Module1:LongInt):LongInt;

    var x, y, q:array[1.3] of LongInt; { Locals array for the sheet }.

    i, it: word; { it-number of iterations }.

    begin.

    if A=1 then begin Result:=1;Obratnoe:=Trunc (Result); exit; end;

    { - p 0 — - x1 y1 — Input data.

    { - A 1 — - x2 y2 — }.

    x[1]: =Module1;

    y[1]: =0;

    x[2]: =A;

    y[2]: =1;

    q[3]: =x[1] div x[2];

    { Local iterations:

    — x1 y1;

    [1,-q3]*-x2 y2- = [x3,y3]= [1*x1-q3*x2,1*y1-q3*y2] }.

    x[3]: =(1*x[3−2]-q[3]*x[3−1]);

    y[3]: =(1*y[3−2]-q[3]*y[3−1]);

    it:=1; { Num of iter.=1 }.

    repeat.

    { (x1,y1)=(x2,y2), (x2,y2)=(x3,y3) }.

    for i:=2 to 3 do begin x[i-1]: =x[i];y[i-1]:=y[i]; end;

    it:=it+1; { Inc num of iter. }.

    q[3]: =x[1] div x[2]; { New value of q=x1x2 }.

    x[3]: =(1*x[3−2]-q[3]*x[3−1]);

    y[3]: =(1*y[3−2]-q[3]*y[3−1]);

    until x[3]=0; { the final conditions of iterations }.

    if (y[2]<0) then Result:=Module1+y[2].

    else Result:=y[2];

    Obratnoe:=Result;

    end;

    Procedure NePozicionnay_Systema_Schislenia.Init;

    var s, t, z:mp_float;

    i:word;

    Pi_long, z_long, mi_long, nu_long:mp_int;

    nu:longint;

    byte_number:word;

    str_temp:string;

    Pi_float, z_float:mp_float;

    begin.

    Modules[10]: =1 000 000−17;

    Modules[9]: =1 000 000−21;

    Modules[8]: =1 000 000−39;

    Modules[7]: =1 000 000−41;

    Modules[6]: =1 000 000−47;

    Modules[5]: =1 000 000−69;

    Modules[4]: =1 000 000−83;

    Modules[3]: =1 000 000−93;

    Modules[2]: =1 000 000−117;

    Modules[1]: =1 000 000−137;

    Modules[20]: =9 999 991;

    Modules[19]: =9 999 973;

    Modules[18]: =9 999 971;

    Modules[17]: =9 999 943;

    Modules[16]: =9 999 937;

    Modules[15]: =9 999 931;

    Modules[14]: =9 999 929;

    Modules[13]: =9 999 907;

    Modules[12]: =9 999 901;

    Modules[11]: =9 999 889;

    {uses high precision computation to compute P}.

    // P_long — произведение модулей.

    mp_init3(P_long, Pi_long, z_long);

    mp_set_int (P_long, 1);

    for i:=1 to n_module do.

    begin.

    mp_set_int (Pi_long, Modules[i]);

    mp_mul (P_long, Pi_long, z_long);

    mp_copy (z_long, P_long);

    end;

    writeln (mp_decimal (P_long));

    writeln (mp_radix_size (P_long, 10));

    // 2^ x = 10^mp_radix_size (P_long, 10).

    // x = mp_radix_size (P_long, 10) * ln (10)/ln (2);

    //writeln (mpf_todouble (P_float));

    //mp_todouble.

    // вычисляем базисы.

    // Bi = (P/Pi)*mi.

    // mi = ((P/Pi) mod Pi)^-1.

    mp_init2(mi_long, nu_long);

    for i:=1 to n_module do begin.

    mp_set_int (Pi_long, Modules[i]);

    mp_div (P_long, Pi_long, z_long); // z_long = P/Pi.

    mp_mod (z_long, Pi_long, nu_long); // nu_long = P/Pi mod Modules[i].

    str_temp:=mp_decimal (nu_long);

    //writeln (str_temp);

    nu:=StrToInt (str_temp); // nu.

    nu:=Obratnoe (nu, Modules[i]); // nu = nu^-1;

    mp_set_int (nu_long, nu);

    mp_mul (nu_long, z_long, Bazis[i]);

    end;

    // Копируем int в float.

    // ну это чтобы вместить весь Р.

    mpf_set_default_prec (trunc (mp_radix_size (P_long, 10) * ln (10)/ln (2))+1);

    // а мне надо только n_f+k_f+1 но только для конечного результата;

    //mpf_set_default_prec (trunc ((n_f+k_f+1) * ln (10)/ln (2))+1);

    mpf_initp3(P_float, Pi_float, z_float, mpf_get_default_prec);

    mpf_set_ext (P_float, 0);

    mpf_add_mpi (P_float, P_long, z_float);

    mpf_copy (z_float, P_float); // P_float — произведение модулей.

    for i:=1 to n_module do.

    mpf_initp (Bazis_float[i], mpf_get_default_prec);

    // вычисляем Bazis_P_float с точностью n_f+k_f+1.

    // Bazis_P_float = Bazis_float / P_float.

    mpf_set_default_prec (trunc ((n_f+k_f+1) * ln (10)/ln (2))+1);

    //mpf_set_default_prec (trunc ((2) * ln (10)/ln (2))+1);

    for i:=1 to n_module do.

    begin.

    mpf_initp (Bazis_P_float[i], mpf_get_default_prec);

    mpf_set_ext (z_float, 0);

    mpf_add_mpi (z_float, Bazis[i], Bazis_float[i]);

    mpf_div (Bazis_float[i], p_float, Bazis_P_float[i]);

    // for checking.

    //mpf_div (Bazis_float[i], p_float, z_float);

    //writeln (mpf_todouble (Bazis_P_float[i]),' ', mpf_todouble (z_float));

    end;

    //readln;

    NSS.ConvertPSStoMSS (A:FareaBinary; var C: ModType);

    end;

    procedure NePozicionnay_Systema_Schislenia.Add (A:ModType;B:ModType;var C: ModType);

    var i: word;

    begin.

    { for i:=1 to n_module do C[i]: =(A[i]+B[i]) mod Modules[i]; }.

    end;

    procedure NePozicionnay_Systema_Schislenia.Sub (A:ModType;B:ModType;var C: ModType);

    var i: word;

    begin.

    { for i:=1 to n_module do C[i]: =(A[i]-B[i]+Modules[i]) mod Modules[i]; }.

    end;

    procedure NePozicionnay_Systema_Schislenia.Mul (A:ModType;B:ModType;var C: ModType);

    var i: word;

    z:Int64;

    begin.

    { for i:=1 to n_module do.

    begin.

    z:=Int64(A[i])*Int64(B[i]);

    C[i]: =z mod Modules[i];

    end;}.

    end;

    function NePozicionnay_Systema_Schislenia.IsRound (A:ModType):boolean; {if true then we need round, false not}.

    var i: word;

    begin.

    end;

    end.

    __________________________.

    Научный руководитель.

    ____________(Фамилия И.О.).

    Научный консультант (при необходимости).

    ____________(Фамилия, И.О.).

    Руководитель программы.

    ____________(Фамилия, И.О.).

    Нормоконтроль пройден:

    Показать весь текст

    Список литературы

    1. Введение в криптографию. Под общей редакцией В. В. Ященко. Издание 4-е, дополненное. МЦНМО, М., 2012.
    2. О. А. Логачёв, А. А. Сальников, С. В. Смышляев, В. В. Ященко. Булевы функции в теории кодирования и криптологии. Издание второе, дополненное. МЦНМО, М., 2012.
    3. Б. Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. Издательство ТРИУМФ, М., 2002.
    4. Х. К. А. ван Тилборг. Основы криптологии. Профессиональное руководство и интерактивный учебник. Мир, М., 2006.
    5. Н. П. Варновский. Математическая криптография. Несколько этюдов. Московский университет и развитие криптографии в России. Материалы конференции в МГУ 17−18 октября 2002 г., МЦНМО, М., 2003, с. 98−121.
    6. O. Goldreich. Foundations of cryptography. Volume 1 (Basic tools). Volume 2 (Basic applications). Cambridge University Press, Cambridge, United Kingdom, 2001 (v. 1), 2004 (v. 2).
    7. Pseudorandomness and cryptographic applications. Princeton University Press, Princeton, New Jersey, 1996.
    8. С.М. Авдошин, А. А. Набебин. Дискретная математика. Модулярная алгебра, криптография, кодирование. — М.: ДМК Пресс, 2017. -352 с.
    Заполнить форму текущей работой
    Купить готовую работу

    ИЛИ