Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
Fatosha
1 / 1 / 2
Регистрация: 12.10.2013
Сообщений: 168
1

Протокол Фейга — Фиата — Шамира

04.03.2018, 13:51. Просмотров 582. Ответов 0

Здравствуйте, пытаюсь реализовать идентификацию с нулевым разглашением с помощью протокола Протокол Фейга — Фиата — Шамира. Имеется следующий код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public static void main(String[] args) throws Exception {
 
    BigInteger p = BigInteger.probablePrime(16, new Random());
    BigInteger q = BigInteger.probablePrime(16, new Random());
    int k = 10;  // Receive k
 
    BigInteger trustedN = p.multiply(q);
 
    List<BigInteger> randomInts = new ArrayList<>();    //s1,s2...sk
    BitSet randomBits = new BitSet(k);  // b1,b2..bk
    List<BigInteger> listV = new ArrayList<>();
 
    Random rand = new Random();
 
    /*
    Choose k positive numbers less than trustedN.
    Choose k bits 0 or 1
     */
 
    for (int i = 0; i < k; i++) {
        // Generate random big ints less than trustedN
        randomInts.add(new BigInteger(trustedN.bitLength() + 1, rand).mod(trustedN));
 
        randomBits.set(i, rand.nextBoolean());
        // (-1)^bi
        BigInteger minus1pow = (((new BigInteger("-1")).pow(randomBits.get(i) ? 1 : 0))).mod(trustedN);
 
        // (s^2)^(-1)
        BigInteger randomIntPow = (randomInts.get(i).pow(2)).modInverse(trustedN);
 
        // vi = (-1)^bi * (s^2)^(-1)
        listV.add((minus1pow.multiply(randomIntPow)).mod(trustedN));
    }
 
    // Random r
    BigInteger randomR = new BigInteger(trustedN.bitLength() + 1, rand).mod(trustedN);
    // Random bit index
    int bitIndex = rand.nextInt(randomBits.length() + 1);
 
    // Calculate x
    BigInteger x = ((new BigInteger("-1")).pow(randomBits.get(bitIndex) ? 1 : 0).mod(trustedN)).multiply((randomR.pow(2)).mod(trustedN)).mod(trustedN);
 
    // Let pretend it was randomly selected vector (e1,e2,e3...)
    String eBits = "1100011010";
 
 
    BigInteger totalMultS = new BigInteger("1");
    for (int i = 0; i < k; i++) {
        totalMultS = totalMultS
                .multiply(randomInts.get(i).pow(eBits.charAt(i) == '1' ? 1 : 0));
    }
 
    totalMultS = totalMultS.mod(trustedN).multiply(randomR.mod(trustedN)).mod(trustedN);
    BigInteger y = totalMultS;
 
 
    BigInteger totalMultV = new BigInteger("1");
 
    for (int i = 0; i < k; i++) {
        totalMultV = totalMultV
                .multiply(listV.get(i).pow(eBits.charAt(i) == '1' ? 1 : 0));
    }
 
    totalMultV = totalMultV.mod(trustedN);
    BigInteger z = (y.pow(2).mod(trustedN)).multiply(totalMultV).mod(trustedN);
 
 
    if (z.toString().equals(x.toString())){
        System.out.println("SUCCESS");
    }
    else {
        System.out.println("FAIL");
 
        System.out.println("x: " + x.toString());
        System.out.println("z: " + z.toString());
 
    }
 
 
 
}
Но он не всегда срабатывает. Не мог бы кто-нибудь подсказать где может быть ошибка?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2018, 13:51
Ответы с готовыми решениями:

Разборке кода (Протокол Фиата-Шамира)
Это чистый исходник кода протокол Фиата-Шамира все компилит но в конце просто вылетает черный...

ЭЦП Фейге-Фиата-Шамира
Объясните сам алгоритм реализации данной электронной цифровой подписи. Искал в интернете, толком...

Цифровая подпись Фиата-Шамира
Нужно реализовать цифровую подпись Фиата-Шамира. Помогите кто чем может. Может есть какая нибудь...

Шифрование методом Шамира
Помогите пожалуйста, на языке СИ реализовать шифрование по методу Шамира. с самим методом...

Http протокол: что подразумевается под словом "протокол"
Начал разбирать Http-протакол. Http- это протокол передачи гипертекста. 1 ) Не сильно понимаю что...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2018, 13:51

Реализовать шифр Шамира для обмена шифрограммами двух абонентов по сети
реализовать шифр Шамира для обмена шифрограммами двух абонентов по сети. Пользуясь изложенным...

Протокол
Вобщем правильно ли я понимаю : В сети различные аппараты таки как ПК обмениваются сообщениями :...

ip протокол
как объявить заголовок протокола ip и заполнить его в последствии... подскажите пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru