eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Problem z szyfrowaniem komunikacji między mcu
Ilość wypowiedzi w tym wątku: 46

  • 11. Data: 2013-07-23 10:25:36
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Piotr Gałka <p...@c...pl>


    Użytkownik "Marek" <f...@f...com> napisał w wiadomości
    news:almarsoft.4886869967084930227@news.neostrada.pl
    ...
    > Mam jakieś zaćmienie, problem może nie do końca z tematki grupy ale w
    > końcu dotyczy obszaru mikrokontrolerów więc zaryzukuję. Dwa mcu komunikują
    > się ze soba (UART), jeden wysyła polecenie (komunikat) drugiemu, ten drugi
    > wykonuje robotę w zależności od polecenia, komunikacja jest w jedną stronę
    > (mcu1->mcu2) i wg schematu: polecenie -> wykonanie. Chciałbym zaszyfrować
    > komunikację między tymi dwoma mcu, aby nie można było podsłuchać
    > komunikatu i go później "podrzucić" do mcu2 wpinając się w uart. Założenie
    > jest takie, że oba mcu maja "w sobie" klucz, wybieram jakis dowolny
    > cipher. I tu pojawia się problem, bo generalnie szyfrownaie nic nie daje,
    > bo: mcu 1 szyfruje polecenie X, dajac zaszyfrowany strumień, powiedzmy
    > "Gk16w123clh3RZdYbGZc8g", 2 mcu mając ten sam klucz deszyfruje
    > "Gk16w123clh3RZdYbGZc8g" dostając polecenie X i je wykonuje. Teraz
    > wystarczy "udawać" mcu1 i wysłać do mcu2 po prostu
    > "Gk16w123clh3RZdYbGZc8g", które zostanie odszyfrowane i spowoduje
    > wykonanie polecenia X. Jak w miarę prosty sposób uniemożliwić taki atak?
    > Wyobrażam sobie, że mcu2 może pierwszy nawiązywać komunikację i stowrzyć
    > "dialog", który (jeśli będzie prawidłowy) oznaczać będzie, że druga strona
    > ma prawidłowy klucz, czyli jest zaufana. Ale można wyobrazić sobie, że
    > będzie można całą sekwencje odpowiedzi mcu1 podrzucic na podstawie analizy
    > statytycznej (np. wcześniej snifująć komunkację), liczba możliwych
    > kombinacji jesty wielka ale skończona, więc nadal problem istnieje...
    >
    Potrzebujesz podpisywania, a nie szyfrowania.
    Przed poleceniem (nawet jawnym) umieść kolejny numer i całość podpisz (CMAC,
    HMAC).
    Odbiornik akceptuje tylko polecenia z dowolnym wyższym numerem od
    poprzedniego, ale prawidłowo podpisane.
    Są jakieś teoretyczne wyliczenia do ilu takich ramek podpis bazujący na
    kluczu 128 bit można uznać za bezpieczny. Są to ilości chyba rzędu 2^64.
    Po wyczerpaniu tej liczby należy wymienić klucze, w żadnym wypadku nie wolno
    umożliwić liczenia od początku z tym samym kluczem.
    P.G.


  • 12. Data: 2013-07-23 11:13:48
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Piotr Gałka <p...@c...pl>


    Użytkownik "Michoo" <m...@v...pl> napisał w wiadomości
    news:ksleqr$lsb$1@mx1.internetia.pl...
    >>
    >> Czyli nie da się przeprowadzić bezpiecznej komunikacji TYLKO w jedną
    >> stronę (polecenie -> wykonanie) bez stosowania wzajemnej synchronizacji
    >> (nr sekwencyjne/jednorazowe kody/timestampy itp),
    >>
    >
    > Niestety nie. (Można wprawdzie robić "sec-by-obscurity" np doklejając
    > przed szyfrowaniem trochę losowego śmiecia tak aby zaszyfrowany ciąg był
    > za każdym razem inny istnieje ryzyko, że atakujący spróbuje wysłać ciąg
    > bez odkodowania i ze zdziwieniem stwierdzi, że to działa.)
    >
    > Zauważ tylko, że numer sekwencyjny jest rozwiązaniem prostym a
    > jednocześnie wymaga synchronizacji jedynie na początku(a wtedy umieszczasz
    > choćby klucze w obu procesorach). W czasie pracy odbiornik musi tylko
    > sprawdzać, czy aktualny serial jest większy od ostatniego i jeżeli tak to
    > go sobie zapisywać - komunikacja w jedną stronę wystarcza. Musisz
    > oczywiście mieć jakieś sumy kontrolne, żeby odkodowanie śmieci (np z
    > powodu zakłóceń) nie spowodowało padu komunikacji.
    >
    Moją wiedzę o kryptografii opieram wyłącznie na moim zdaniem genialnej
    książce Ferguson, Schneier "Kryptografia w praktyce".
    Treść zgodna z tytułem = "w praktyce".
    Według nich złożoność każdego systemu to wróg bezpieczeństwa i nie należy
    tej złożoności podnosić wprowadzając zależność między podpisywaniem
    wiadomości, a jej szyfrowaniem.
    Złamanie szyfrowania nie powinno oznaczać jednoczesnego złamania
    podpisywania i odwrotnie.
    W tym co proponujesz CRC ma być podpisem (rozumiem, że ciąg
    {numer|rozkaz|crc} jest szyfrowany, lub crc po szyfrowaniu). Złamanie
    szyfrowania natychmiast daje dostęp do podpisywania. Jeśli treść rozkazu nie
    musi być ukrywana to można zakładać, że takie działanie to tylko
    podpisywanie. Nie znam się na tyle aby być pewnym, ale coś podejrzewam, że
    kryptolodzy z jakiegoś powodu uzupełnienia wiadomości crc i zaszyfrowania
    tego nie uznają za dobrej jakości podpisywanie bo gdyby tak uznawali to nie
    kombinowali by z jakimiś CMAC czy HMAC.
    Też na podstawie tej książki - nie ma jednomyślności wśród kryptologów czy
    wiadomość najpierw podpisywać, czy najpierw kodować.
    Numer może być przesyłany jawnie - można zaoszczędzić kodowania.
    Na przykład numer 8 bajtów, rozkaz 8 bajtów, podpis 8 bajtów. Podpis
    obejmuje numer i rozkaz = jeden blok 16 bajtowy. Wysyłany jest numer i 16
    bajtowy wynik zakodowania rozkazu i podpisu.
    P.G.


  • 13. Data: 2013-07-23 11:46:12
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Zbych <a...@o...pl>

    W dniu 23.07.2013 11:13, Piotr Gałka pisze:

    > Nie znam się na tyle aby być pewnym, ale coś podejrzewam,
    > że kryptolodzy z jakiegoś powodu uzupełnienia wiadomości crc i
    > zaszyfrowania tego nie uznają za dobrej jakości podpisywanie bo gdyby
    > tak uznawali to nie kombinowali by z jakimiś CMAC czy HMAC.

    A nie chodzi w tym przypadku o to, że obecność crc w zaszyfrowanej
    wiadomości ułatwia sprawdzenie czy dobrze odszyfrowaliśmy wiadomość
    podczas ataku?


  • 14. Data: 2013-07-23 12:54:00
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Piotr Gałka <p...@c...pl>


    Użytkownik "Zbych" <a...@o...pl> napisał w wiadomości
    news:51ee50e4$0$1223$65785112@news.neostrada.pl...
    >W dniu 23.07.2013 11:13, Piotr Gałka pisze:
    >
    >> Nie znam się na tyle aby być pewnym, ale coś podejrzewam,
    >> że kryptolodzy z jakiegoś powodu uzupełnienia wiadomości crc i
    >> zaszyfrowania tego nie uznają za dobrej jakości podpisywanie bo gdyby
    >> tak uznawali to nie kombinowali by z jakimiś CMAC czy HMAC.
    >
    > A nie chodzi w tym przypadku o to, że obecność crc w zaszyfrowanej
    > wiadomości ułatwia sprawdzenie czy dobrze odszyfrowaliśmy wiadomość
    > podczas ataku?
    >
    Raczej nie.
    Algorytmy szyfrujące z definicji mają być odporne również w przypadku ataku
    z tekstem jawnym.
    Większość udanych ataków w historii było atakami z tekstem jawnym. Łamanie
    Enigmy w zasadzie odbywało się z tekstem jawnym - zakładali typowy znany
    początek wiadomości, albo znając format komunikatów statków meteo
    przyjmowali znaną skąd inąd pozycję tych statków, a najłatwiej było jak po
    północy ktoś nadał wiadomość z wczorajszymi kluczami, a potem ją powtórzył z
    dzisiejszymi.
    Dlatego zawsze się zakłada, że atakujący zna, lub potrafi przewidzieć
    przynajmniej część tekstu jawnego.
    Poza tym zawsze trzeba zakładać, że atakującym może być autor danego
    systemu.
    P.G.


  • 15. Data: 2013-07-23 15:29:15
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: g...@s...invalid (Adam Wysocki)

    Piotr Gałka <p...@c...pl> wrote:

    > Widzisz jakiś problem w tym, że ktoś, kto podsłucha transmisję w której jest
    > seq=3 nada następną w której jest seq=4 ?

    Te numery byłyby szyfrowane razem z właściwą wiadomością, dopiero po
    deszyfracji MCU2 widziałby numer.

    --
    "zanim nastala era internetu, kazdy wiejski glupek siedzial w swojej wiosce"
    http://www.chmurka.net/


  • 16. Data: 2013-07-23 22:57:48
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Michoo <m...@v...pl>

    On 23.07.2013 10:25, Piotr Gałka wrote:

    > Potrzebujesz podpisywania, a nie szyfrowania.
    > Przed poleceniem (nawet jawnym) umieść kolejny numer i całość podpisz
    > (CMAC, HMAC).

    No właśnie pytanie jest czego potrzeba. Czy użyje się
    msg=serial+msg;
    msg=msg+md5(md5(msg)+key);

    czy
    msg=serial+msg;
    msg=3des(msg,key);

    jest często kwestią gustu. Dobra funkcja skrótu jest dość długa więc
    użycie jej może znacznie powiększyć wiadomość, z drugiej strony hash
    liczy się często szybciej niż trwa szyfrowanie większych danych...

    > Odbiornik akceptuje tylko polecenia z dowolnym wyższym numerem od
    > poprzedniego, ale prawidłowo podpisane.
    > Są jakieś teoretyczne wyliczenia do ilu takich ramek podpis bazujący na
    > kluczu 128 bit można uznać za bezpieczny. Są to ilości chyba rzędu 2^64.
    > Po wyczerpaniu tej liczby należy wymienić klucze, w żadnym wypadku nie
    > wolno umożliwić liczenia od początku z tym samym kluczem.

    Szczerze mówiąc nie wiem jak skomentować umieszczenie w jednym zdaniu
    "2^64" i "wyczerpanie tej liczby".


    --
    Pozdrawiam
    Michoo


  • 17. Data: 2013-07-23 22:59:57
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Michoo <m...@v...pl>

    On 23.07.2013 11:13, Piotr Gałka wrote:
    > Według nich złożoność każdego systemu to wróg bezpieczeństwa i nie
    > należy tej złożoności podnosić wprowadzając zależność między
    > podpisywaniem wiadomości, a jej szyfrowaniem.

    To nie jest wprowadzanie złożoności a jej redukcja.

    > Złamanie szyfrowania nie powinno oznaczać jednoczesnego złamania
    > podpisywania i odwrotnie.

    Odważne słowa biorąc po uwagę popularność kryptografii asymetrycznej.

    > W tym co proponujesz CRC ma być podpisem (rozumiem, że ciąg
    > {numer|rozkaz|crc} jest szyfrowany, lub crc po szyfrowaniu). Złamanie
    > szyfrowania natychmiast daje dostęp do podpisywania.

    Protokoły szyfrowania zapewniają zazwyczaj też potwierdzenie
    autentyczności - tylko posiadacz klucza może dokonać szyfrowania w
    sposób zapewniający odszyfrowanie.

    > Jeśli treść rozkazu
    > nie musi być ukrywana to można zakładać, że takie działanie to tylko
    > podpisywanie.

    Tak i nie - pojawiają się możliwości ataków z tekstem jawnym, więc
    kryptografia musi być silniejsza. 32 bitowy klucz szyfrujący nieznany
    tekst może spokojnie wystarczać do typowych zastosowań, 32 bitowy klucz
    podpisujący jawne polecenie nie nadaje się do niczego o ile nie ma
    naprawdę wielu rund.

    > Nie znam się na tyle aby być pewnym, ale coś podejrzewam,
    > że kryptolodzy z jakiegoś powodu uzupełnienia wiadomości crc i
    > zaszyfrowania tego nie uznają za dobrej jakości podpisywanie bo gdyby
    > tak uznawali to nie kombinowali by z jakimiś CMAC czy HMAC.

    To działa w drugą stronę - jeżeli potrzebujesz tylko uwierzytelnienie
    długiej wiadomości to używasz HMAC, który jest tańszy obliczeniowo od
    dobrego szyfrowania. Jeżeli chcesz mieć dodatkowe zapewnienia (jak np
    niemożliwość podrobienia wiadomości przez obie strony) to uciekasz się
    do kluczy asymetrycznych - i nadal jest to tańsze od szyfrowania całości
    bo podpisujesz tylko skrót wiadomości. Ale gdy wiadomość jest krótka to
    szyfrowanie może być optymalnym rozwiązaniem.

    > Też na podstawie tej książki - nie ma jednomyślności wśród kryptologów
    > czy wiadomość najpierw podpisywać, czy najpierw kodować.

    Dla dobrych algorytmów nie ma to znaczenia. Natomiast odpowiednie
    kombinacje pozwalają na użycie słabszych ale "tańszych" algorytmów.

    > Numer może być przesyłany jawnie - można zaoszczędzić kodowania.
    > Na przykład numer 8 bajtów, rozkaz 8 bajtów, podpis 8 bajtów. Podpis
    > obejmuje numer i rozkaz = jeden blok 16 bajtowy. Wysyłany jest numer i
    > 16 bajtowy wynik zakodowania rozkazu i podpisu.

    Razem 32 bity - jak myślisz ile czasu zajmie kryptoanaliza wspomagana
    metodą brute-force na jakimś i7?

    --
    Pozdrawiam
    Michoo


  • 18. Data: 2013-07-24 08:50:15
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Piotr Gałka <p...@c...pl>


    Użytkownik "Michoo" <m...@v...pl> napisał w wiadomości
    news:ksmrch$4sf$2@mx1.internetia.pl...

    >> Są jakieś teoretyczne wyliczenia do ilu takich ramek podpis bazujący na
    >> kluczu 128 bit można uznać za bezpieczny. Są to ilości chyba rzędu 2^64.
    >> Po wyczerpaniu tej liczby należy wymienić klucze, w żadnym wypadku nie
    >> wolno umożliwić liczenia od początku z tym samym kluczem.
    >
    > Szczerze mówiąc nie wiem jak skomentować umieszczenie w jednym zdaniu
    > "2^64" i "wyczerpanie tej liczby".
    >
    Faktycznie może być podejrzane. Nawet jakby nie w jednym zdaniu :).
    Możliwe, że tam było 2^48 (nie pamiętam, wyszukanie w książce zajęło by mi
    za dużo czasu, bo nie wiem przy jakiej okazji to pisali). Poza tym to są
    jakieś wyliczenia teoretyczne, które zakładają brak praktycznych
    ograniczeń - na przykład na liczbę ramek wysyłanych na sekundę. OIDP w
    przykładach rozmieszczenia danych w bloku licznikowym (preferują tryb CTR)
    stosują 32 bitowy licznik ramek i 32 bitowy licznik bloków w ramce.
    Autorzy sugerując wybór odpowiednich algorytmów i wielkości kluczy itp.
    zakładają, że tworzony obecnie system ma zapewnić bezpieczeństwo przez 50
    lat. Wyjątkiem są systemy z kluczem publicznym, które gdyby miały zapewnić
    bezpieczeństwo na 50 lat wymagały by znacznie dłuższych kluczy niż stosowane
    obecnie i zbytnio obniżyły by wydajność systemów. Dlatego dla systemów
    klucza publicznego zakładają niełamalność przez 20 lat, ale twierdzą, że
    takie systemy (w przeciwieństwie do systemów z kluczem symetrycznym) muszą
    być skalowalne, aby stopniowo, wraz ze wzrostem mocy obliczeniowych
    zwiększać długość kluczy.
    P.G.


  • 19. Data: 2013-07-24 10:28:17
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Piotr Gałka <p...@c...pl>


    Użytkownik "Michoo" <m...@v...pl> napisał w wiadomości
    news:ksmrgi$5rd$1@mx1.internetia.pl...
    >> Według nich złożoność każdego systemu to wróg bezpieczeństwa i nie
    >> należy tej złożoności podnosić wprowadzając zależność między
    >> podpisywaniem wiadomości, a jej szyfrowaniem.
    >
    > To nie jest wprowadzanie złożoności a jej redukcja.

    Redukcja złożoności obliczeniowej, ale wprowadzanie zależności pomiędzy
    poszczególnymi funkcjami systemu.

    >> Złamanie szyfrowania nie powinno oznaczać jednoczesnego złamania
    >> podpisywania i odwrotnie.
    >
    > Odważne słowa biorąc po uwagę popularność kryptografii asymetrycznej.

    Mówiłem wyłącznie o kryptografii symetrycznej. O asymetrycznej wiem za mało
    aby się wypowiadać.

    >
    >> W tym co proponujesz CRC ma być podpisem (rozumiem, że ciąg
    >> {numer|rozkaz|crc} jest szyfrowany, lub crc po szyfrowaniu). Złamanie
    >> szyfrowania natychmiast daje dostęp do podpisywania.
    >
    > Protokoły szyfrowania zapewniają zazwyczaj też potwierdzenie
    > autentyczności - tylko posiadacz klucza może dokonać szyfrowania w sposób
    > zapewniający odszyfrowanie.

    Oczywiste jest, że nie posiadając klucza nie zaszyfruje się tak, aby dało
    się odszyfrować i nie ma to związku z autentycznością (cały czas mówię o
    kryptologii symetrycznej)

    Co to znaczy "zazwyczaj" ?
    Są takie co zapewniają i są takie co nie zapewniają.
    Z tych co zapewniają słyszałem tylko o dwu:
    - OCB - ale są osoby i instytucje roszczące sobie prawa patentowe do tego
    trybu.
    - CCM - uważam, że przy krótkich ramkach należało by użyć jakiejś prostszej
    funkcji formatującej niż przedstawiona w standardzie, ale nie umiem być na
    100% pewien, czy wymyślona przeze mnie funkcja rzeczywiście spełnia
    określone w standardzie wymagania, a nie spełnienie jest jak rozumiem
    naruszeniem bezpieczeństwa.

    >
    >> Jeśli treść rozkazu
    >> nie musi być ukrywana to można zakładać, że takie działanie to tylko
    >> podpisywanie.
    >
    > Tak i nie - pojawiają się możliwości ataków z tekstem jawnym, więc
    > kryptografia musi być silniejsza. 32 bitowy klucz szyfrujący nieznany
    > tekst może spokojnie wystarczać do typowych zastosowań, 32 bitowy klucz
    > podpisujący jawne polecenie nie nadaje się do niczego o ile nie ma
    > naprawdę wielu rund.

    Tu mnie zadziwiasz.
    Według mnie 32 bitowy podpis może być wystarczający do typowych zastosowań,
    ale w żadnym przypadku nie oznacza to klucza 32 bitowego.
    Natomiast użycie 32 bitowego klucza do szyfrowania tekstu (w ogóle do
    czegokolwiek) wydaje mi się śmieszne.
    Na moim (kilkuletnim) PC AES128 (napisany przez mnie tak, aby był czytelny,
    a nie optymalny) wykonuje się poniżej 1us. Zakładam, że jakiś rozsądny
    algorytm z kluczem 32 bity wykona się na przykład w 200ns. Przeszukanie
    całej przestrzeni kluczy zajmie w takiej sytuacji 14 minut. Zawsze trzeba
    zakładać atak z tekstem jawnym.
    Poza tym jeśli szyfrowany jest tekst w znanym języku to komputerowa
    weryfikacja, czy uzyskany tekst ma sens w tym języku nie zajmuje dużo czasu.
    Zwiększenie liczby rund ma jedynie wpływ na możliwości analitycznego
    poszukiwania klucza. Dla ataku siłowego ma znikome znaczenie bo wydłuża czas
    tego ataku tylko wprost proporcjonalnie do liczby rund.
    Poza tym nie znam żadnych algorytmów z kluczem 32 bity, a stosowanie
    wymyślonych przez siebie algorytmów (nie sprawdzonych dogłębnie przez
    znających się na rzeczy) jest proszeniem się o kłopoty.

    >> Numer może być przesyłany jawnie - można zaoszczędzić kodowania.
    >> Na przykład numer 8 bajtów, rozkaz 8 bajtów, podpis 8 bajtów. Podpis
    >> obejmuje numer i rozkaz = jeden blok 16 bajtowy. Wysyłany jest numer i
    >> 16 bajtowy wynik zakodowania rozkazu i podpisu.
    >
    > Razem 32 bity - jak myślisz ile czasu zajmie kryptoanaliza wspomagana
    > metodą brute-force na jakimś i7?
    >
    Jak Ci wyszły te 32 bity ?
    P.G.


  • 20. Data: 2013-07-25 09:57:33
    Temat: Re: Problem z szyfrowaniem komunikacji między mcu
    Od: Marek <f...@f...com>

    On Tue, 23 Jul 2013 10:25:36 +0200, Piotr
    Gałka<p...@c...pl> wrote:
    > Potrzebujesz podpisywania, a nie szyfrowania.
    > Przed poleceniem (nawet jawnym) umieść kolejny numer i całość
    podpisz (CMAC,
    > HMAC).
    > Odbiornik akceptuje tylko polecenia z dowolnym wyższym numerem od
    aby
    > poprzedniego, ale prawidłowo podpisane.



    Ale to jest sposób komunikacji, w którym:

    Xb -> Y

    gdzie Xb polecenie o ilosci bajtow b wysłane z nadajnika
    Y akcja odbiornika (wykonanie polecania Xb)


    nie analizujac zupełnie zawartości Xb daje nam
    ograniczona liczbę możliwych Xb tj. ograniczoną wielkością możliwych
    kombinacji zbioru b. Jeśli b będzie małe, a założenie jest takie aby
    komunikacja była jak najkrótsza, to wystarczy wypróbować wszystkie
    możliwe kombinacje.
    Model wręcz stworzony do replay attack.
    Odbiornik musiałby pamiętać ostatni nr sekwencyjny aby nie przyjąć
    już użytego. Takie rozwiązanie ma kolejne dwa zastrzeżenia:
    1. jawna komunikacja, skrót dostępny jak na dłoni, można go użyć jako
    wsad do analizy krypto w celu wykrycia jego słabości.
    2. nr sekwencyjny musiałby być zapisywany w jakieś pamieci
    nieulotnej, przy kilku tysiącu poleceń na godzinę flash mcu może
    szybko przekroczyć gwarantowana liczbe zapisów. Trzeba by mieć jakiś
    zewnętrzny, odpowiednio duży flash. A mając zewnętrzna pamięć ja
    trzeba by też chronić, by nie można było zewnętrznie zmodyfikować jej
    zawartość (zmniejszyć numer sekwencyjny).
    PozostajeStosowanie nr sekwencyjnego "w środku" działa dodatkowo na
    niekorzyść, bo powoduje, ze dla różnych b istnieje takie samo Y
    (dokładnie tyle ile jest możliwych nr sekwencyjnych).

    --
    Marek

strony : 1 . [ 2 ] . 3 ... 5


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: