Szyfrowanie klucza prywatnego
Uwaga! Poruszamy kwestie wyłącznie zgodne z prawem! Nie namawiamy do łamania prawa! Nie radzimy jak łamać prawo!
- Początkujący
- Posty: 5
- Rejestracja: 27 kwietnia 2021
- Reputacja: 0
Szyfrowanie klucza prywatnego
Postautor: Mark24 » wtorek, 27 kwietnia 2021, 11:52
Krótkie pytanie o rodzaj szyfru (do użycia np. w C#, C++).
Otóż chcę zaszyfrować tekst (string) do szyfrogramu (też string), następnie szyfrogram odszyfrować kluczem do tekstu. Chciałbym, aby przy podaniu błędnego klucza – procedura odszyfrowująca też zrobiła output do tekstu i zakończyła działanie bez informacji o błędzie (że klucz był błędny).
Aktualnie trudność mam taką, że używając sprawdzonych procedur szyfrowania AES – gdy wpiszę nieprawidłowy klucz to procedura „sypie błędem”. Wtedy np. hacker przejdzie po wszystkich kombinacjach i wyłapie tą, która nie kończy się błędem. Gdyby każde deszyfrowanie kończyło się „sukcesem” czyli wygenerowaniem jakiegoś string-u, to hacker użyłby taki odszyfrowany string (klucz prywatny) np. 5 razy na giełdę, która by go po 6 razie zbanowała. A tak może w zaciszu domowym ustalić klucz do deszyfrowania, a później nim swobodnie rozporządzać.
Czy można prosić o jakiś namiar na taki temat szyfru zawsze działającego, jakąś podpowiedź?
Mark24
- Początkujący
- Posty: 546
- Rejestracja: 14 czerwca 2017
- Reputacja: 352
- Lokalizacja: Szczecin
Szyfrowanie klucza prywatnego
Postautor: bMh » wtorek, 27 kwietnia 2021, 12:56
bMh
- Początkujący
- Posty: 5
- Rejestracja: 27 kwietnia 2021
- Reputacja: 0
Szyfrowanie klucza prywatnego
Postautor: Mark24 » wtorek, 27 kwietnia 2021, 13:30
Kod: Zaznacz cały
try
{
//ciało programu
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
Myśle tu o szyfrach podstawieniowych, gdzie po deszyfrowaniu uzyskujemy tu zawsze jakiś ciąg zdeszyfrowany i nie wiadomo, czy on jest dobry czy nie, bo zawiera po prostu jakiś ciąg znaków, który za każdym razem może być kluczem prywatnym. Dopiero po użyciu takiego klucza (np. na giełdzie) giełda Ci odpowiada, czy wysłany klucz jest ok i masz tylko kilka prób, a nie 1000000000 …
Podejrzewam, że świat kryptografii rozwiązał ten problem, ale nie wiem jak, nie mam takiej wiedzy i zapytałem na forum, bo tu nieźli spece są od tego…
Mark24
- Wygadany
- Posty: 593
- Rejestracja: 8 lutego 2020
- Reputacja: 1114
- Lokalizacja: 7-bit secp256k1
Szyfrowanie klucza prywatnego
Postautor: garlonicon » wtorek, 27 kwietnia 2021, 13:37
Jeśli jednak koniecznie chcesz mieć klucz, który da się odszyfrować na wiele sposobów, to tak naprawdę wystarczy zwykłe dodawanie. Zaczynasz od 256-bitowego klucza prywatnego X, do którego dodajesz 256-bitowe zaszyfrowane hasło Y. Wynikiem jest X+Y (modulo liczba kluczy, czyli ffff...4141). Najprostsze, co możesz zrobić, to Y=SHA-256(hasło), no ale to nie jest zbyt bezpieczne, więc dobrze byłoby to czymś wzmocnić, co najmniej dorzucenie soli by się przydało, żeby atakujący nie jechał tablicami tęczowymi. Przy deszyfrowaniu wywołujesz wybraną funkcję na haśle i odejmujesz Y od zaszyfrowanego klucza (modulo liczba kluczy, czyli ffff...4141). W tym przypadku dodawanie i odejmowanie nie wpływa na wynik modulo, więc można to robić bezpiecznie.
Oprócz tego, samych danych nie polecam trzymać "na surowo", dobrze byłoby jakąś sumę kontrolną dorzucić do zaszyfrowanego tekstu, najlepiej z kodami korekcyjnymi, żeby dało się odzyskać klucz w zaszyfrowanej formie, nawet jeśli pomylisz pojedynczą literę przy zapisywaniu tego na przykład na kartce.
Ogólnie to odradzam tego typu klucze, bo jest spora szansa, że sam zapomnisz hasła, no ale jeśli koniecznie chcesz to zrobić, to opierając się na dowolnej przemiennej operacji (typu dodawanie) będzie to wystarczająco bezpieczne, zakładając że klucz prywatny oraz sól są całkowicie losowe, a użyte hasło jest wystarczająco silne.
garlonicon
- Początkujący
- Posty: 5
- Rejestracja: 27 kwietnia 2021
- Reputacja: 0
Szyfrowanie klucza prywatnego
Postautor: Mark24 » wtorek, 27 kwietnia 2021, 13:47
Tak, ok, tak właśnie robię i wyłapuję taki błąd instrukcją:
Kod: Zaznacz cały
try
{
//ciało programu
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
Myślę tu o szyfrach podstawieniowych, gdzie po deszyfrowaniu uzyskujemy tu zawsze jakiś ciąg zdeszyfrowany i nie wiadomo, czy on jest dobry czy nie, bo zawiera po prostu jakiś ciąg znaków, który za każdym razem może być kluczem prywatnym. Dopiero po użyciu takiego klucza (np. na giełdzie) giełda Ci odpowiada, czy wysłany klucz jest ok i masz tylko kilka prób, a nie 1000000000 …
Podejrzewam, że świat kryptografii rozwiązał ten problem, ale nie wiem jak, nie mam takiej wiedzy i zapytałem na forum, bo tu nieźli spece są od tego…
Mark24
- Początkujący
- Posty: 5
- Rejestracja: 27 kwietnia 2021
- Reputacja: 0
Szyfrowanie klucza prywatnego
Postautor: Mark24 » wtorek, 27 kwietnia 2021, 14:13
Garlonicon, dzięki za tak wyczerpującą odpowiedź.garlonicon pisze: ↑ wtorek, 27 kwietnia 2021, 13:37 Przede wszystkim zastanów się, czy rzeczywiście chcesz mieć klucz zaszyfrowany w taki sposób. Jeśli dojdziesz do wniosku, że jednak nie, to BIP-38 powinien wystarczyć.
Wynika z niej, że być może nie najlepszą amatorską drogę obrałem, więc korzystając z Twej uprzejmości – uszczegółowię problem, który być może da się rozwiązać zupełnie inaczej.
Otóż wykonuję zapytania API do pewnej giełdy. Tam dane ogólne można uzyskać poprzez fejkowego usera, ale np. stan swojego konta, prowizje i inne dane z prawdziwego konta można uzyskać podając w argumencie funkcji cały klucz API - prywatny i cały publiczny.
Nie chcę ich za każdym razem wpisywać z palca do swojego programu, chciałbym część klucza prywatnego zahardkodować i skompilować w kodzie programu, a część wpisywać za każdym razem z palca. W kodzie oczywiście nie chcę w sposób bezpośredni zapisywać części klucza prywatnego – dlatego chciałbym go zaszyfrować właśnie (jak ktoś zrobiłby deasemblację programu). I o tym szyfrowaniu piszę.
Najlepiej byłoby użyć w software obsługę klucza sprzętowego Ledger przez USB, ale na to nie mam na razie czasu.
Czy taki sposób działania z kluczem publicznym jest sensowny? (na tym forum autor pewnego software pisał, że tak właśnie robi…)
Mark24
- Wygadany
- Posty: 593
- Rejestracja: 8 lutego 2020
- Reputacja: 1114
- Lokalizacja: 7-bit secp256k1
Szyfrowanie klucza prywatnego
Postautor: garlonicon » wtorek, 27 kwietnia 2021, 14:21
Niezupełnie, bo nawet jeśli sam klucz jest deszyfrowalny do wielu innych kluczy, no to jeśli na powiązanym adresie leżą jakiekolwiek monety, to da się to sprawdzić. Blockchain można przeglądać do woli, żeby to nie zadziałało, to giełda musiałaby nigdy tego klucza nie użyć. Oprócz tego, jeśli środki leżą na giełdzie, to bardziej bym się obawiał, że giełda je zwinie, niż że jakiś haker się włamie i to odszyfruje.Dopiero po użyciu takiego klucza (np. na giełdzie) giełda Ci odpowiada, czy wysłany klucz jest ok i masz tylko kilka prób, a nie 1000000000
Przykładowe rozwiązanie masz wyżej, tylko trzeba byłoby je dopieścić, żeby było rzeczywiście bezpieczne. No i też dobrze byłoby, żeby jakiś BIP na to powstał, zanim zaczniesz masowo tego używać. Ewentualnie można byłoby z istniejącego BIP-a po prostu wyrżnąć te kawałki, które odpowiadają za weryfikację. Warto jednak pamiętać, że tworzenie własnych rozwiązań kryptograficznych jest jak bawienie się zapałkami, siedząc na beczce prochu. Chodzi o to, że bardzo łatwo jest popełnić błąd. Zrobisz "modulo bias" i pozamiatane: https://bitcointalk.org/index.php?topic=5326468.0Podejrzewam, że świat kryptografii rozwiązał ten problem, ale nie wiem jak
garlonicon
- Weteran
- Posty: 1139
- Rejestracja: 12 sierpnia 2017
- Reputacja: 3368
Szyfrowanie klucza prywatnego
Postautor: fusywszklanejkuli » wtorek, 27 kwietnia 2021, 15:57
Owszem, rozwiązaniem Twojego podstawowego problemu jest key stretching. Użytkownik wpisuje hasło, z hasła odpowiednio długo generowany jest klucz, i dopiero ten klucz służy do szyfrowania danych.
fusywszklanejkuli
- Początkujący
- Posty: 5
- Rejestracja: 27 kwietnia 2021
- Reputacja: 0
Szyfrowanie klucza prywatnego
Postautor: Mark24 » wtorek, 27 kwietnia 2021, 20:43
Zgodnie z Waszymi sugestiami nie będę kombinować nic nowego, ale „na szybko” użyję jednak szyfrowania AES, a jak będę miał czas – wejdę głębiej w temat.
Ściągnąłem wcześniej kilka fajnych przykładów używania AES w C#, najbardziej zwięzły wydaje się przykład: z GitHub: https://gist.github.com/magicsih/be06c2 ... 6feb96ce8c.
Zadziwia mnie, że w kilku różnych i niezależnych przykładach implementacji – podanie błędnego klucza deszyfrującego kończy się „wyłożeniem” programu i ludzie korzystając z takich klas – obejmują strategiczne metody klauzulą [try – catch] i tak ratują program przed wyłożeniem. To dosyć nieeleganckie rozwiązanie w klasie, którą trzeba ratować.
Na kolanie napisałem program przykładowy, w którym sprawdziłem sobie działanie szyfrowania AES. Działa to fajnie, z tym zastrzeżeniem, że też trzeba zastawiać pułapkę [try] jak klucz deszyfrujący jest ciut inny. Poniżej przykład w działaniu.
Czy może ktoś zna jakąś klasę obsługującą AES, która się przy tym nie „wysypuje”, ale ustawia jakąś flagę na false?
Mark24
- Wygadany
- Posty: 593
- Rejestracja: 8 lutego 2020
- Reputacja: 1114
- Lokalizacja: 7-bit secp256k1
Szyfrowanie klucza prywatnego
Postautor: garlonicon » środa, 28 kwietnia 2021, 07:32
Wyjątki można łapać, a flagi ignorować. Ale to robi Twój program. Natomiast program hakera może tego nie robić. Chodzi o to, że AES sam w sobie ma już wbudowane sprawdzanie błędów, więc dane da się odszyfrować tylko w jeden sposób. Jeśli chcesz rzeczywiście mieć szyfr, który da się odszyfrować na wiele sposobów, to musisz pokombinować z algorytmem tak, aby nie było tam sprawdzania poprawności hasła.Czy może ktoś zna jakąś klasę obsługującą AES, która się przy tym nie „wysypuje”, ale ustawia jakąś flagę na false?
garlonicon
Wróć do „Anonimowość i bezpieczeństwo w sieci”
- Bitcoin
- Bezpieczeństwo
- Giełdy i serwisy - zagrożenia
- Anonimowość i bezpieczeństwo w sieci
- Piramidy i scamy
- Bitcoin
- Rozwój projektu
- Twój wkład w rozwój projektu
- Przedszkole
- Pomoc techniczna
- Generowanie monet
- Pomoc
- Ogólnie o miningu
- Mining pools
- Kopacze (miners)
- Sprzęt (hardware) do miningu
- Bitcoin w mediach
- Projekty związane z Bitcoin
- Imprezy, spotkania, konferencje
- Kwestie prawne
- Ciekawostki
- Organizacje charytatywne, zbiórki, dotacje
- Programowanie i wdrożenia
- Ankiety
- Portfele bitcoin
- Dla zaawansowanych - nowi tylko czytają
- Ekonomia
- Rozważania ekonomiczne
- Ankiety ekonomiczne
- Analiza techniczna
- Tutaj zapłacisz bitcoinami
- Polska
- Świat
- Tablica ogłoszeń
- Towary
- Sprzedam
- Kupię
- Zamienię
- Udziały
- Usługi
- Wymiana walut
- Komentarze
- Nagrody
- Wymiana Face-to-Face
- Dolnośląskie
- Kujawsko-pomorskie
- Lubelskie
- Lubuskie
- Łódzkie
- Małopolskie
- Mazowieckie
- Opolskie
- Podkarpackie
- Podlaskie
- Pomorskie
- Śląskie
- Świętokrzyskie
- Warmińsko-mazurskie
- Wielkopolskie
- Zachodniopomorskie
- Cała Polska
- Szukam/dam pracę
- Boty i strategie
- Giełdy, kantory, bitomaty
- Kantory
- Bitomaty
- Inwestycje
- Metale szlachetne
- ICO
- Forki i Alternatywne kryptowaluty
- LiteCoin
- Ekonomia
- Mining
- Ustawienia i konfiguracje
- Linki
- Dogecoin
- Ekonomia
- Mining
- NameCoin
- Ekonomia
- Mining
- Pozostałe
- Scrypt
- SHA256
- Dash
- Ethereum
- ETC
- Lisk
- Bitcoin Cash
- Kopanie kryptowalut
- Kopanie GPU
- Kopanie CPU
- Kopanie ASIC/FPGA
- Kopalnie kryptowalut
- IOTA
- NEO
- Chia
- SCAMY
- Inne
- Linki
- Faucety, kraniki, gry
- Księga skarg i zażaleń
- AMA
- Strona i forum
- Administrator mówi
- Opinie, propozycje, uwagi
- Propozycje banów
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość
- Strefa czasowa UTC+02:00
- Na górę
- Zmień szerokość ekranu
- Usuń ciasteczka witryny
O Polskim Forum Bitcoin
Polskie Forum Bitcoin skupia miłośników Bitcoina w Polsce. Tu możesz zadać pytania odnośnie Bitoina lub podyskutować na ciekawe tematy.
Polecamy
Treści na tym forum mają charakter wyłącznie informacyjno-edukacyjny, a posty są wyrazem osobistych poglądów ich autorów. Treśći na forum ani w całości ani w części nie stanowią "rekomendacji" w rozumieniu przepisów Rozporządzenia Ministra Finansów z dnia 19 października 2005 r. w sprawie informacji stanowiących rekomendacje dotyczące instrumentów finansowych, lub ich emitentów (Dz.U. z 2005 r. Nr 206, poz. 1715).