Exemplo n.º 1
0
        private void button1_Click(object sender, EventArgs e)
        {
            long   V, N;
            double S;

            ZEROPROOF.GenerateKeys(out V, out S, out N);
            textBoxAN.Text = Convert.ToString(N);
            textBoxAV.Text = Convert.ToString(V);
            textBoxBN.Text = Convert.ToString(N);
            textBoxBV.Text = Convert.ToString(V);
            textBoxAS.Text = Convert.ToString(S);
        }
Exemplo n.º 2
0
        private void buttonIdentif_Click(object sender, EventArgs e)
        {
            textBoxLog.Clear();
            textBoxLog.AppendText("=====================" + Environment.NewLine);
            textBoxLog.AppendText("Начало проверки" + Environment.NewLine);
            textBoxLog.AppendText("=====================" + Environment.NewLine);
            var Rnd   = new Random();
            var Proof = true;

            var AN = Convert.ToInt64(textBoxAN.Text);
            var AS = Convert.ToInt64(textBoxAS.Text);
            var BN = Convert.ToInt64(textBoxBN.Text);
            var BV = Convert.ToInt64(textBoxBV.Text);

            var NeBudetPovtornoR = new HashSet <int>();

            for (var i = 1; i <= 100; i++)
            {
                textBoxLog.AppendText("---------------------" + Environment.NewLine);
                textBoxLog.AppendText("Сторона А(доказывает)" + Environment.NewLine);
                textBoxLog.AppendText("---------------------" + Environment.NewLine);

                var AR = 0;
                do
                {
                    AR = Rnd.Next(1, (int)AN);
                }while (NeBudetPovtornoR.Contains(AR));
                NeBudetPovtornoR.Add(AR);
                textBoxLog.AppendText("Случайное R = " + Convert.ToString(AR) + Environment.NewLine);

                var AX = ZEROPROOF.FastPowFunc(AR, 2, AN);
                textBoxLog.AppendText("X = " + Convert.ToString(AX) + Environment.NewLine);

                textBoxLog.AppendText("Отправка X стороне B" + Environment.NewLine);

                //---------------------------------------------

                textBoxLog.AppendText("---------------------" + Environment.NewLine);
                textBoxLog.AppendText("Сторона B(проверяет)" + Environment.NewLine);
                textBoxLog.AppendText("---------------------" + Environment.NewLine);

                textBoxLog.AppendText("Получение X от стороны A" + Environment.NewLine);
                var BX = AX;
                textBoxLog.AppendText("X = " + Convert.ToString(BX) + Environment.NewLine);

                var Bb = Rnd.Next(0, 2);
                textBoxLog.AppendText("Случайный бит b = " + Convert.ToString(Bb) + Environment.NewLine);

                textBoxLog.AppendText("Отправка b стороне A" + Environment.NewLine);

                //---------------------------------------------

                textBoxLog.AppendText("---------------------" + Environment.NewLine);
                textBoxLog.AppendText("Сторона А(доказывает)" + Environment.NewLine);
                textBoxLog.AppendText("---------------------" + Environment.NewLine);

                textBoxLog.AppendText("Получение b от стороны B" + Environment.NewLine);
                var Ab = Bb;
                textBoxLog.AppendText("b = " + Convert.ToString(Ab) + Environment.NewLine);

                long AY = 0;
                if (Ab == 0)
                {
                    textBoxLog.AppendText("Отправка R стороне B" + Environment.NewLine);
                }
                else
                {
                    AY = AR * AS % AN;
                    textBoxLog.AppendText("Y = " + Convert.ToString(AY) + Environment.NewLine);
                    textBoxLog.AppendText("Отправка Y стороне B" + Environment.NewLine);
                }

                //---------------------------------------------

                textBoxLog.AppendText("---------------------" + Environment.NewLine);
                textBoxLog.AppendText("Сторона B(проверяет)" + Environment.NewLine);
                textBoxLog.AppendText("---------------------" + Environment.NewLine);

                if (Bb == 0)
                {
                    textBoxLog.AppendText("Получение R от стороны A" + Environment.NewLine);
                    var BR = AR;
                    textBoxLog.AppendText("R = " + Convert.ToString(BR) + Environment.NewLine);
                    textBoxLog.AppendText("Вычисленный X = " + Convert.ToString(ZEROPROOF.FastPowFunc(BR, 2, BN)) + Environment.NewLine);
                    textBoxLog.AppendText("Полученный X = " + Convert.ToString(BX) + Environment.NewLine);
                    if (BX == ZEROPROOF.FastPowFunc(BR, 2, BN))
                    {
                        textBoxLog.AppendText("Сторона A знает sqrt(X)" + Environment.NewLine);
                    }
                    else
                    {
                        textBoxLog.AppendText("Сторона A не знает sqrt(X). Сторона A не является подлинной!" + Environment.NewLine);
                        Proof = false;
                        break;
                    }
                }
                else
                {
                    textBoxLog.AppendText("Получение Y от стороны A" + Environment.NewLine);
                    var BY = AY;
                    textBoxLog.AppendText("Y = " + Convert.ToString(BY) + Environment.NewLine);
                    textBoxLog.AppendText("Вычисленный X = " + (BigInteger.Pow(BY, 2) * BV % BN).ToString() + Environment.NewLine);
                    textBoxLog.AppendText("Полученный X = " + Convert.ToString(BX) + Environment.NewLine);
                    if (BX == Convert.ToInt64((BigInteger.Pow(BY, 2) * BV % BN).ToString()))
                    {
                        textBoxLog.AppendText("Сторона A знает sqrt(V-1)" + Environment.NewLine);
                    }
                    else
                    {
                        textBoxLog.AppendText("Сторона A не знает sqrt(V-1). Сторона A не является подлинной!" + Environment.NewLine);
                        Proof = false;
                        break;
                    }
                }
            }
            if (Proof)
            {
                textBoxLog.AppendText("Сторона A идентифицирована!" + Environment.NewLine);
            }
            else
            {
                textBoxLog.AppendText("Сторона A не идентифицирована!" + Environment.NewLine);
            }
        }