Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RSA
Forum PHP.pl > Forum > PHP
gitbejbe
Tworze pewnego rodzaju API i chcę zastosować uwierzytelnianie na podstawie klucz prywatnych/publicznych. Przewiduje w przyszłości apke na androida i chce zapewnić bezpieczną komunikacje z serwerem. Jeszcze tego nie robiłem i czytam o tym od pewnego czasu i rodzą się dla mnie pytania na które nie mogę odnaleźć jednoznacznej odpowiedzi. Pozwolę sobie zadać każde pytanie które mnie nurtuje, nawet te które wydają mi się oczywiste. Chcę być po prostu pewny. Korzystam z : http://phpseclib.sourceforge.net/rsa/intro.html

1) Gdzie gromadzić klucze ? Każdy użytkownik będzie mieć swój klucz prywatny i publiczny. Baza danych - jak zresztą gdzieś wyczytałem, jest chyba najgłupszym do tego miejscem, choć dla mnie pod względem wygody byłoby to idelane. Jesli jednak baza nie jest zła, to jaki typ kolumny byłby najlepszy ?
2) wielkość kluczy publicznych. Wiem, ze jest to uzależnione od siły tworzenia klucza prywatnego. Ale nawet dla 128 bitów klucz prywatny zajmuje aż 64 znaki ! Nie wyobrażam sobie jako użytkownik takiej apki przepisywanie na androida tak długiego ciągu. Nie da rady tego skrócić nie obniżając siły klucza?
4) jest w necie sporo przykładów gdzie klucze tworzy się z linii komend i zapisuje do pliku... ale za cholerę tego nie rozumiem. wolałbym zostać przy samym php'ie...

albo może inaczej... to może ja źle rozumuje. Jak powinna wyglądać taka szyfrowana komuunikacja ? Chcę zrobić tak: uzytkownik zakłada sobie konto na mojej stronie, po rejestracji dostaje na maila/lub w panelu swojego konta, klucz publiczny. Klucz prywatny zas zapisywany jest gdzieś na serwerze( baza? ). Uzytkownik który wysyła jakieś żadanie z apki na androida do serwera , wysyła mi zakodowaną wiadomość kluczem publicznym - np przez jakąś implementacją RSA dla javy... Odbieram wiadomość, sprawdzam kluczem prywatnym, jeśli gitara to gitara. czy jednak wygląda to zupełnie inaczej w praktyce?
Pyton_000
Klucze generuje użytkownik na swojej maszynie np. APK na andka lub na PC.
Zakłada sobie konto w Twoim serwisie dodając swój klucz publiczny.
Na mejla dostaje Twój klucz publiczny...

Zapisujesz sobie w postaci plików nazwanych jakimś hashem mp. sha1 lub coś w ten deseń. Nawet UUID wystarczy.
W bazie trzymasz tylko powiązanie plik-user.

gitbejbe
Dzięki za odpowiedź.
Cytat
Klucze generuje użytkownik na swojej maszynie np. APK na andka lub na PC.
Zakłada sobie konto w Twoim serwisie dodając swój klucz publiczny.
Na mejla dostaje Twój klucz publiczny...

Nie czaje... i jak wygląda wtedy taka komunikacja ? skoro to użytkownik generuje sobie klucze , to jak serwer ma odszyfrować wiadomość ? Być może jest to prostrze niż myśle, ale chyba za szybko to napisałeś ; )

Cytat
Zapisujesz sobie w postaci plików nazwanych jakimś hashem mp. sha1 lub coś w ten deseń. Nawet UUID wystarczy.
W bazie trzymasz tylko powiązanie plik-user.

to jest dla mnie jasne ale w połączeniu z tym co napisałeś wcześniej coś mi nie gra... Cały czas wydaje mi się ze istotą szyfrowania RSA jest wygenerowanie 2 kluczy, publicznego i prywatnego, z czego prywatny zostaje na serwerze i nikt nie ma do niego dostępu, a publiczny wędruje dla użytkownika - a wszystko to odbywa się na serwerze docelowym. dlatego nie rozumiem jak użytkownik może generować te klucze na zewnętrznej aplikacji?
Pyton_000
No to dam akademicki przykład

Alicja i Bob chcą sobie przesyłać wiadomości szyfrowane. Aby tego dokonać muszą wpierw wykonać kilka czynności:
1. Alicja i Bob generują u siebie klucze (pub i priv)
2. Wymieniają się kluczami pub.

Alicja wysyła wiadomość szyfrowaną kluczem pub Boba. Ten dostaje wiadomość i rozszyfrowuje ją swoim kluczem priv

W drugą stroną tak samo.

Edited.

Poprawiłem bo lekką głupotę napisałem ad. szyfrowania smile.gif
ghost1511
W dużym skrócie klucz publiczny służy do szyfrowania wiadomości i jak nazwa mówi jest on publiczny ( czyli lepiej, aby nikt go nie poznał, ale wielkiej tragedii nie ma jak wycieknie). Klucz prywatny należy do tego który wygenerował ten klucz. Ani użytkownik nie będzie znał Twojego klucza prywatnego, ani Ty jego. Swoje wiadomości szyfrujesz jego publicznym i on je deszyfruje swoim kluczem prywatnym i analogicznie w drugą stronę.
Pyton_000
Ghost publiczny właśnie udostępnia sie wszędzie. Nic ci po pubblicznym kluczu jak nie masz prywatnego. Nawet jak zaszyfrujesz wiadomość czyimś publicznym to i tak tylko osoba mająca doń prywatny klucz odczyta wiadomosc smile.gif
gitbejbe
super : ) już wszystko rozumiem : ) Jeszcze tylko jedno... co z tą długością klucza publicznego ? jest na to jakiś sposób?

EDIT:
dla 128 bitowego szyfrowania

-----BEGIN RSA PRIVATE KEY-----
MGMCAQACEQDWuOOFZ1u3BmYZuO9aKYOXAgMBAAECEA+eKW0McbHUAwnhpgDe2ukC CQDv51+E8Q2mnwIJAOUg/iIfmFgJAgh93KaJaaoewwIJAMYP1f4TR7JZAgkAg27c ng9pfzU=
-----END RSA PRIVATE KEY

-----BEGIN PUBLIC KEY-----
MCwwDQYJKoZIhvcNAQEBBQADGwAwGAIRAKLGOmJyyaqxpeSGbhsfUSUCAwEAAQ==
-----END PUBLIC KEY-----

nie wspominajac ze raczej nikt nie używa szyfrowania ponizej 512 bitów (ba daje sie zazwyczaj 2k - 4k), to nie wyobrażam sobie abym miał przepisywać TAKI klucz publiczny do androida, czy może jednak tak musi być ? ;/
freemp3
Możesz ładować plik, w którym będzie podany klucz wink.gif
ghost1511
Cytat(Pyton_000 @ 17.02.2014, 13:57:17 ) *
Ghost publiczny właśnie udostępnia sie wszędzie. Nic ci po pubblicznym kluczu jak nie masz prywatnego. Nawet jak zaszyfrujesz wiadomość czyimś publicznym to i tak tylko osoba mająca doń prywatny klucz odczyta wiadomosc smile.gif

Nigdzie nie napisałem, że mając klucz publiczny możesz odczytać wiadomość.
Pyton_000
A ja nigdzie nie negowałem Twojej wypowiedzi smile.gif
com
Jak już o tym mowa to to co chcesz uzyskać to przecież SSL http://muflon.photosite.pl/doc/progzesp/ssl.html Mieszacie koledze w głowie ...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.