Skip to content

Commit

Permalink
RC2
Browse files Browse the repository at this point in the history
  • Loading branch information
maxirmx committed Feb 24, 2024
1 parent 8fca24d commit 60c02b2
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 15 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: test
name: Test

on:
push:
Expand Down
31 changes: 30 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@
# Distributed Key Generation
[![test](https://github.com/maxirmx/dkg/actions/workflows/test.yml/badge.svg)](https://github.com/maxirmx/dkg/actions/workflows/test.yml)
[![CodeQL](https://github.com/maxirmx/dkg/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/maxirmx/dkg/actions/workflows/github-code-scanning/codeql)

# Dkg

Реализация на c# алгоритма распределённой генерации ключей (Pedersen 91) с пороговой схемой K из N (схема Шамира) на стандартных эллиптических кривых (Sec256k1 c возможностью замены)

## Теоретическая основа
- Pedersen, T.P. (1991). A Threshold Cryptosystem without a Trusted Party. In: Davies, D.W. (eds) Advances in Cryptology — EUROCRYPT ’91. EUROCRYPT 1991. Lecture Notes in Computer Science, vol 547. Springer, Berlin, Heidelberg.

https://doi.org/10.1007/3-540-46416-6_47
- Pedersen, T.P. (1992). Non-Interactive and Information-Theoretic Secure Verifiable Secret Sharing. In: Feigenbaum, J. (eds) Advances in Cryptology — CRYPTO ’91. CRYPTO 1991. Lecture Notes in Computer Science, vol 576. Springer, Berlin, Heidelberg.

https://doi.org/10.1007/3-540-46766-1_9
- Wong, Theodore & Wing, Jeannette. (2001). Verifiable Secret Redistribution.

Перечисленные статьи доступны в папке doc

## Практическая основа
Данная разработка - результат перевода на C# и последующего рефакторинга реализации вышеперечисленных алгоритмов в библиотеке [dedis](https://github.com/dedis/kyber)

## Структура решения
С# solution включает три проекта:
- ```dkgLibrary``` -- .net class library с реализацией алгоритмов и некоторых дополнительных утилит
- ```dkgLibraryTests``` -- тесты для dkgLibrary
- ```dkgSample``` -- демонстрационное приложение

## С чего начинать
- ```dkgLibraryTests/AnEndToEndExample.cs``` -- этот тест демонстрирует основные возможности алгоритма распределённой генерации ключей и схемы Шамира в синхронном виде (алгоритм, предложенный Pederson'ом по свой природе являеся синхронным).
- ```dkgSample/Program.cs``` -- асинхронная (многопоточная) реализация алгоритма распределённой генерации ключей и схемы Шамира в видк gRPC сервера. Задача синхронизации узлов в этом приложении не решалась, испльзуются временные задержки.
13 changes: 0 additions & 13 deletions dkgLibraryTests/testECElGamal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,18 +72,5 @@ public void TestEncryptDecryptString()
// Check that the decrypted string matches the original plaintext
Assert.That(decrypted, Is.EqualTo(plaintext));
}

[Test]
public void TestDecryptInvalidCipher()
{
string plaintext = "Hello, world!";

// Encrypt the plaintext
(IPoint C1, IPoint C2) cipher = ECElGamalEncryption.Encrypt(_g, _publicKey, plaintext);
// Mangle cipher
cipher.C1 = cipher.C1.Add(cipher.C1);

Assert.Throws<ArgumentException>(()=>ECElGamalEncryption.DecryptData(_g, _privateKey, cipher));
}
}
}
File renamed without changes.
File renamed without changes.
Binary file not shown.

0 comments on commit 60c02b2

Please sign in to comment.