Arduino - šifrování přenosu po Ethernetu

Jenda

Re:Arduino - sifrovani prenosu dat po Ethernetu
« Odpověď #15 kdy: 05. 10. 2014, 21:08:39 »
Ještě k té RC4: https://en.wikipedia.org/wiki/RC4#Biased_outputs_of_the_RC4

Co se týče použití CBC, dej si pozor, aby jsi na serveru neměl padding nebo decrypting oracle. Dobře je to popsáno v prvních kapitolách http://cryptopals.com/.


JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Arduino - sifrovani prenosu dat po Ethernetu
« Odpověď #16 kdy: 05. 10. 2014, 21:27:15 »
K cemu vam to zabezpeceni vlastne je?
Asi to má téct po internetu, ale pokud to nejsou zajímavá data, nikdo se nebude obtěžovat je dešifrovat.
Presne tak, potece to pres internet + treba pres nejakou free nesifrovanou wifi, to neovlivnim

No, rikal jste puvodne, ze to potece pres Ethernet. Internet neni Ethernet. Ethernet mate na lokalni siti, nicmene jestli to posilate treba z domova, tak Ethernet konci na domaci strane modemu. Na druhe strane to s nejvetsi pravdepodobnosti uz bude neco jineho.

martin

Re:Arduino - sifrovani prenosu dat po Ethernetu
« Odpověď #17 kdy: 05. 10. 2014, 23:29:04 »
Slo by u RC4 pouzit pro inicializaci cislo z AD prevodniku?
Použil bych nějaký PRNG. IV nemusí být náhodný, jediné, co je potřeba, je, aby byl pokaždé jiný (a pokud možno něco trochu složitějšího než pouhá inkrementace).
Jak jsem mel nahodna cisla v JSONu, slo by to brat jako IV?
Pripadne to neresit JSONem, ale ziskat jedno cislo z AD. To imho nejsnazsi cesta k ziskani nahodne cisla na Arduino. Na pin se nic nepripoji a cte se hodnota.
Jak tomu predam IV?

Jak to myslis se zacatkem keystreamu?
První bajty RC4 keystreamu mají biasy a navíc z nich lze odvodit informace o klíči. Na tomto dojelo třeba WEP. Řeší se to tak, že na začátku to chvíli (50-1000 bajtů) točíš naprázdno a až pak šifruješ.
Kdyz na zacatku kus vyhodim, nebudou chybet data? Nebo mam z dat udelat neco jako "ABCdata.data.data", kde ABC blok 50 bajtu dlouhy?

Planuju desifrovat data z Arduina v Jave. Zatim pro testovani pouzivam:
Kód: [Vybrat]
public class RC4 {
public static void main(String[] args) throws Exception {
byte[] key = "tajneHeslo".getBytes("ASCII");
String clearText = "Moje tajna zprava.";

Cipher rc4 = Cipher.getInstance("RC4");
SecretKeySpec rc4Key = new SecretKeySpec(key, "RC4");
rc4.init(Cipher.ENCRYPT_MODE, rc4Key);
byte[] cipherText = rc4.update(clearText.getBytes("ASCII"));

Cipher rc4Decrypt = Cipher.getInstance("RC4");
rc4Decrypt.init(Cipher.DECRYPT_MODE, rc4Key);
byte[] clearText2 = rc4Decrypt.update(cipherText);
String decrypted = new String(clearText2, "ASCII");
System.out.println("decrypted" + decrypted);
}
}
Pokud prvni X bajtu budu "tocit", jak to poresim na serverove strane? Implementace Javy nejak resi toceni pevnich X bajtu a CBC?