Zewnętrzne, zaszyfrowane hasło

Zewnętrzne, zaszyfrowane hasło
DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

Mam nadzieję, że to dobry dział. Inny mi nie pasował :)

Mam program, w którym za pomocą kodu: http://stackoverflow.com/questions/10168240/encrypting-decrypting-a-string-in-c-sharp/10168287 szyfruję pewne dane. W kodzie znajduje się hasło do deszyfracji, ponieważ dla każdego użytkownika ma być takie samo (tak ma być, bo później następują kolejne właściwe już deszyfracje).

Bardzo zależy mi na tym, żeby osoba, która ma kod źródłowy nie mogła tych danych zdeszyfrować.

Jak mogę inaczej zamieścić tam to hasło? Jakoś przez serwer / dodatkowy zaszyfrowany plik?

Chodzi mi o to, żeby ktoś, kto ma dostęp do kodu i tak nie mógł tego hasła odgadnąć (zdeszyfrować tych danych).

Starałem się jasno wyjaśnić o co mi chodzi. Jakby co, spróbuję inaczej wytłumaczyć.

edytowany 2x, ostatnio: DamianOS.MP5
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
1

jezeli jest zapisane haslo w kodzie, to ten ktos zawsze bedzie mogl je odczytac.
Mozesz uzyc obfuscatora, mozesz robic cuda na kiju, ale dopoki haslo jest wpisane w kod zrodlowy to sie nie da nic zrobic

Jedynie co by mozna zrobic to wysylac zapytanie do serwera i on by zwracal czy uzytkonik (i jaki) sie zalogowal z odpowiednim tokenem

DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

właśnie o coś takiego mi chodzi, żeby nie trzymać hasła w kodzie, tylko gdzieś zewnętrznie je pobrać, tak, żeby nie dało się go przy tym odczytać (czyli np. nie przez jakiś link do pliku txt z serwera). można jakoś to zrobić?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

W skrócie: nie ma takiej możliwości. Użytkownik z dostępem do twojej aplikacji może zrobić dokładnie tyle samo co ona.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:9 dni
1

Nie jest możliwe osiągnięcie tego co chcesz. Bo jeśli dobrze wywnioskowałem z Twojego opisu:

  1. Hasło ma być takie samo dla wszystkich użytkowników.
  2. Chcesz by osoba mająca dostęp do źródła nie mogła odszyfrować danych.

Niestety oba te punkty się wykluczają. Zwłaszcza pierwszy jest dziwny. Moim pytaniem jest co dokładnie chcesz osiągnąć, bo możliwe, że robisz to okrężną drogą.


DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

Właśnie o taką odpowiedź mi chodziło.

Jest mi to potrzebne, ponieważ w programie przetwarzam loginy i hasła do kont pocztowych. Są one zaszyfrowane. Chcę teraz, żeby program mógł je rozszyfrować, a użytkownik, który ma dostęp do kodu źródłowego nie mógł tego zrobić. Macie jakieś pomysły? Wszystko biorę pod uwagę.

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:9 dni
0

To są loginy i hasła podawane przez użytkownika? Jeśli tak, to odpowiedź jest kretyńsko prosta: nie rób tego (http://www.catb.org/~esr/fetchmail/design-notes.html).


fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

@Damianos.MP5 ale majac jedno haslo dla wszystkich, to zebys trzymal hash w kodzie (bo musisz miec na podstawie jakies porownanie to osoba ktora ma ten kod. Zobaczy jaki to hash (jezeli rozpozna metode hashu) i moze bruteforcem brac hasla i sprawdzac po kolei. Juz jest trudniej dla takiej osoby, ale to jest nadal jedne haslo. Jezeli jest warto, to ktos poswieci ta chwile by miec haslo dla wszystkich uzytkownikow

druga opcja jest by haslo i nazwa uzytkownika zostala wpisywana przez kogos, to nastepnie jest wysylane do serwera ktory sprawdza autentykacje i zwraca Ci token, ktory jest wazny powiedzmy 30 min czy tam 60 min i z tym tokenem mozesz robic zapytania do jakiegos serwera.

Wiec musisz sprawic by nie bylo w Twojej aplikacji logiki, jezeli bedzie logika. To nie mozesz zrobic tak, by to bylo super bezpieczne

DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

Trochę nie o to mi chodziło.

Zobaczcie na fragment kodu:

Kopiuj
var json = new JavaScriptSerializer().Serialize(task);
HashCode hashCode = new HashCode();
EncryptAndDecrypt encryption = new EncryptAndDecrypt();
hashCode.HashCodeForDownload = encryption.Encrypt(json, "haslo_pobierania");
hashCode.HashCodeForEdit = encryption.Encrypt(json, "haslo_edycji");
hashCode.WholeHashCode = encryption.Encrypt(hashCode.HashCodeForDownload + sep + hashCode.HashCodeForEdit, "ogolne_haslo");

Serializuję sobie obiekt klasy Task. Mam w nim różne dane, m.in. loginy i hasła do kont pocztowych. Najpierw szyfruję je na jedno hasło (hasło pobierania). Później szyfruję je na drugie hasło - hasło edycji. Później oddzielam separatorem dwa zaszyfrowane stringi i szyfruję jeszcze raz, na jakieś ogólne hasło.

Dlaczego tak robię. Muszę mieć tylko jeden zaszyfrowany ciąg znaków, który będzie dostępny na dwa hasła. Nie da się czegoś takiego zrobić, bo byłaby to luka w metodach szyfrujących. Dlatego szyfruję je na pierwsze hasło i drugie i potem łączę to w jedną całość.

Jest mi to potrzebne, ponieważ pierwszy zaszyfrowany string przetwarzam w programie w zupełnie innych miejscach niż ten drugi.

Hasło edycji zna tylko jedna osoba. Hasło pobierania zna wiele użytkowników. Załóżmy, że jestem jednym z nich. W programie nie mam dostępu do żadnych loginów i haseł do kont pocztowych, ale mając zaszyfrowany string i hasło pobierania mogę pobrać plik. Więc string zaszyfrowany na hasło pobierania musi zawierać dane do kont pocztowych, mimo, że bezpośrednio w programie nie da się ich odczytać.

I teraz ktoś, kto zna kod może sobie mając hasło pobierania i zaszyfrowany na nie string odczytać (choć nie da się tego zrobić w programie). I tu mam pytanie jak się przed tym zabezpieczyć.

Powinien być jakiś sprytny sposób, ale nie mogę na niego wpaść i dlatego proszę o pomoc. Mam nadzieję, że w miarę jasno napisałem o co mi chodzi.

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:9 dni
0

Dalej nie ograniam, czemu robisz to jednym "kontem" zamiast 2 osobnych. Masz osobne "konto" "tylko do odczytu" i osobne do edycji. Opisz dokładnie co chcesz uzyskać bo strasznie zagmatwane jest to co napisałeś.

Bo tutaj widzę ewidentnie, że potrzebujesz jakiejś formy autoryzacji. Możliwe, że może być to LDAP albo jakaś konstrukcja asymetryczna lub współdzielenia sekretu.


DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

Ale w programie nie ma żadnych kont, na które użytkownik miałby się zalogować, żeby móc z programu korzystać. Pisząc o kontach mam na myśli tylko konta pocztowe. Wygląda to tak:

Odpalam program i wybieram w nim tzw. kreator wysyłania. Tam wczytuję plik, który chcę wysłać i wczytuję konta pocztowe, na które plik będzie wysłany. Dodatkowo wypełniam inne pola, ale to nie jest już istotne. W tym kreatorze także wpisuję hasło pobierania i hasło edycji.

Po zatwierdzeniu, plik wysyła mi się na wczytane konta pocztowe. Po zakończeniu wysyłania zostaje wygenerowany zaszyfrowany tekst, który opisałem powyżej:

Kopiuj
Serializuję sobie obiekt klasy Task. Mam w nim różne dane, m.in. loginy i hasła do kont pocztowych. Najpierw szyfruję je na jedno hasło (hasło pobierania). Później szyfruję je na drugie hasło - hasło edycji. Później oddzielam separatorem dwa zaszyfrowane stringi i szyfruję jeszcze raz, na jakieś ogólne hasło.

Dlaczego tak robię. Muszę mieć tylko jeden zaszyfrowany ciąg znaków, który będzie dostępny na dwa hasła. Nie da się czegoś takiego zrobić, bo byłaby to luka w metodach szyfrujących. Dlatego szyfruję je na pierwsze hasło i drugie i potem łączę to w jedną całość.

Jest mi to potrzebne, ponieważ pierwszy zaszyfrowany string przetwarzam w programie w zupełnie innych miejscach niż ten drugi.

Ten zaszyfrowany tekst wysyłam innemu użytkownikowi. Podaję mu też hasło do pobrania. Hasło do edycji znam tylko ja.

I teraz gość, któremu wysłałem zaszyfrowany tekst i hasło pobierania może sobie ten plik pobrać, wystarczy, że wpisze te dane w odpowiednie miejsce w programie.

W innym miejscu ja, jako osoba, która wysłała plik, mogę zarządzać loginami i hasłami do kont, które są zaszyfrowane w tym tekście, ale muszę podać hasło edycji. Osoba, która ma tylko hasło pobierania nie ma w programie dostępu do loginów i haseł.

Ale ktoś, kto widzi kod źródłowy, może sobie loginy i hasła uzyskać, choć zna tylko hasło pobierania, a nie zna hasła edycji. A to dlatego, że w tekście zaszyfrowanym na hasło pobierania muszą być zapisane loginy i hasła do kont pocztowych, bo muszę się na nie przecież zalogować, żeby pobrać z nich plik.

edytowany 2x, ostatnio: DamianOS.MP5
Zobacz pozostały 1 komentarz
DamianOS.MP5
DamianOS.MP5
Nie wiem, jak mam inaczej napisać. Chodzi mi o to, że osoba, która ma zaszyfrowany tekst i hasło pobierania do niego oraz zna kod programu to może sobie odczytać zaszyfrowane w tym tekście loginy i hasła do kont pocztowych. Nie może zrobić tego bezpośrednio w programie, ale znając kod już tak. I mi cały czas zależy na tym, żeby taka osoba nie mogła tego zrobić.
J0
Możesz mieć apkę, ale hasło i login pobierać z jakiegoś serwera, gdzie były by bezpieczne i wysyłać tylko te, które powinien mieć, a nie wszystkie.
hauleth
Opisz cel, nie Twoje rozwiązanie.
DamianOS.MP5
DamianOS.MP5
@hauleth: Nie wiem, jak inaczej wytłumaczyć. Podałem wszystko o co mi chodzi. @J0ras: Mówisz o loginach i hasłach do kont? W takim razie musiałbym jakoś zaszyfrować indywidualne dane do połączenia z serwerem. Tu też wydaje mi się, że będzie można je zdeszyfrować. Swoją drogą zakładam przetwarzanie dziesiątek tysięcy emaili - tu też może pojawić się kłopot.
hauleth
@DamianOS.MP5: tak opisałeś wszystko co robisz by rozwiązać jakiś problem. Jednak opisałeś tylko swoje rozwiązanie, a nie problem jaki masz.
0

Odczytanie === edycja, więc źle ci się wydaje.

Ale można zakodować i innym kluczem odkodować, ale tym samym nie zakodujesz co odkodujesz i to jedyna sprawdzona metoda.

DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

Napisz coś więcej na ten temat, ok?

J0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 8 lat
0

.

edytowany 1x, ostatnio: J0ras
DamianOS.MP5
DamianOS.MP5
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 7 lat
  • Postów:74
0

Dzięki za odp, ale w czym taki unikalny klucz miałby mi pomóc?

Cały czas zastanawiam się, czy dałoby radę nie zmieniając struktury zaszyfrowanego tekstu (czyli żeby pozostały tam loginy), jakoś z zewnątrz bezpiecznie wczytać tylko to "hasło_ogóle", które służy mi do połączenie dwóch innych zaszyfrowanych na dwa hasła (pobierania i edycji) tekstów.

0

Chodzi ci o taką strukturę,

klucz szyfruje wszystkie loginy i hasła, które i tak są zaszyfrowane.

Po odszyfrowaniu kluczem, wszystko jest zaszyfrowane, dla każdego loginu i hasła jest następne szyfrowanie(1 - główne hasło + x - ilość użytkowników, tyle szyfrów w szyfsze)

ps. po co trzymasz loginy i hasła czyichś maili, skoro to mocno narusza bezpieczeństwo i prywatność osób trzecich?
Najlepiej, niech trzymają hasła wyłącznie do twojego serwera, który będzie sprawował większą kontrolę.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Popatrz moze na coś takiego https://github.com/secretin/secretin-lib#details ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)