ale osoba która dodała głosowanie klucz prywatny ma swoim komputerze
Początkowo napisałeś, że to aplikacja generuje parę kluczy (Przy tworzeniu głosowania generuję te klucze, klucz prywatny wysyłam do użytkownika w formie pliku.), stąd moja sugestia.
Głosy są kodowane publicznym przy każdym głosie, więc jak podmieni klucze to dodający głosowanie później przy odtajnianiu wyników wyborów nie odkoduje, co będzie równe z ingerencją w dane
Skoro to założyciel głosowania tworzy parę kluczy, pozostaje problem bezpiecznego transportu tego klucza publicznego do głosujących (kwestia zaufanego kanału wzmiankowana przeze mnie na samym początku).
Tzn. co stoi na przeszkodzie, aby bazodanowiec / sysadmin zrobili sztuczkę w wyniku której założyciel głosowania wygeneruje klucz publiczny X, wyśle ten klucz do aplikacji, a następne aplikacja do głosujących wyśle klucz Y (znany atakującym)? (tj. skąd głosujący będą wiedzieli, że klucz publiczny, którym podpisują dane, został rzeczywiście wygenerowany przez założyciela głosowania)
Czyli najlepiej by było sprawdzać przy oddaniu każdego głosu czy dany klucz publiczny przechowywany w bazie danych w pozycji głosowania pasuje do klucza prywatnego głosowania, ale wtedy musiałbym przechowywać go na serwerze. Więc na ten moment głosujący oddaje głos i tyle. W gestii twórcy jest zapewnienie odpowiedniej infrastruktury, żeby przez FTP nikt się nie dostał i nie podmienił appki i nie miał dostępu do bazy danych.
W aktualnej wersji, jeśli twórca głosowania nie będzie mógł odkodować wyników to będzie znaczyło, że było grzebane w bazie. Takie założenie mi wystarczy w aplikacji.
Generalnie po przeczytaniu Waszych postów wymyśliłem coś takiego. Generuję parę kluczy, prywatny i publiczny. Przy tworzeniu głosowania generuję te klucze, klucz prywatny wysyłam do użytkownika w formie pliku. Klucz publiczny przechowuję w bazie danych. Przy oddaniu głosu koduję głos kluczem publicznym i w formie nie jawnej przechowuję również w bazie. Po zakończeniu głosowania twórca głosowania wysyła klucz prywatny do skryptu i ujawnia wyniki.
W takim rozwiązaniu czy to administrator bazy czy to administrator serwera nie będzie w stanie podejrzeć wyników głosowania.
Widzę, że bez udzielenia SOBIE i nam odpowiedzi co jest celem, proponujesz implementację.
Podejrzec nie bedzie mógł, ale skasuje / wstawi takie wyniki głosowania, jakie sobie wymyśli.
Jesli TYLKO to jest twoim problemem, co pośrednio z postu wynika, nie moja sprawa. Ale moim zdaniem wymyślone mniejszościowe zagrożenie wyniesione na najwazniejsze (jedyne)
Generalnie założenie jest takie, żeby admin bazy danych, admin serwerowy, autor aplikacji nie mógł podejrzeć wyników wyborów w trakcie głosowania.
Po głosowaniu wszystko będzie jawne.