Bezpečnost socketu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Bezpečnost socketu – Java – Fórum – Programujte.comBezpečnost socketu – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
exilim
~ Anonymní uživatel
28 příspěvků
22. 7. 2012   #1
-
0
-

Zdravim,

píšu si měnší app v javě pro linux. Client - server, client je kalsická graf. app pro win v C#.

Má sloužit k zapínání a vypínání některých procesů (příklad - zapne /opt/server/server1.sh)...

Jak zabezpečit co nejlépe ty přenášená data, aby v případě, že by ty data někdo odposlouchával aby nedokázal rozpoznat co tam vlastně proudí? (Hesla hashovat a jen porovnávat to vim, ale v případě že někdo odchytí ten paket na logování a pošle ho znovu tak aby ho to neloglo...)

Díky za help

Nahlásit jako SPAM
IP: 149.255.82.–
Reklama
Reklama
jano
~ Anonymní uživatel
53 příspěvků
22. 7. 2012   #2
-
0
-

sifrovanie...

Nahlásit jako SPAM
IP: 85.135.160.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #3
-
+1
-
Zajímavé

Šifrování je samozřejmě základ. Musíš prostě zabezpečit, aby obsah zpráv byl unikátní pro danou relaci, takže před přihlášením vykomunikuj unikátní data (zabezpečeno nějakou obecnou šifrou), která se např. použijí k šifrování dalších paketů, takže i kdyby ti někdo zachytil ten logovací paket, tak mu bude k ničemu, protože na serveru ani nepůjde dešifrovat nebo půjde, ale výsledek bude rozsypaný čaj.

Nahlásit jako SPAM
IP: 78.80.52.–
exilim
~ Anonymní uživatel
28 příspěvků
23. 7. 2012   #4
-
0
-

#3 liborb
Takže si třeba vymyslet svuj algoritmus? Řekněme že budu posílat 2pakety za sebou

/§/SID/§/aaaaa/§/

/§/START/§/Zprava, ci nejake data/§§/aaaaa/§/

V prvnim paketu musi byt nejake 5tiznakove generovane cislo treba a to musi byt i v nasledujicim paketu, oboje bude zahashovnay treba ze jeste cely paket kazdy druhy znak posunu o 5 znaku v ASCI tabulce nebo tak neco? Co by ste mi doporucili?

Diky

Nahlásit jako SPAM
IP: 149.255.82.–
exilim
~ Anonymní uživatel
28 příspěvků
23. 7. 2012   #5
-
0
-

Popřípadě třeba ještě ten zakodovanej paket rozporcuju na 3 casti a na druhe strane si je zase slozim? :)

Nahlásit jako SPAM
IP: 149.255.82.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #6
-
0
-

No myslel jsem to spíš takto (veškerá komunikace je zašifrovaná):

- klient se připojí, pošle inicializační paket
- serveru mu odpoví nějakým ID (třeba nějaký 64bajtový hash)
- oba si ho budou pro tento soket pamatovat a použijí ho jako součást šifrovacího klíče pro další komunikaci
- následná komunikace probíhá v "unikátní" šifře pro daný soket, tj. login již bude zašifrován "neopakovatelně"

Nahlásit jako SPAM
IP: 78.80.52.–
exilim
~ Anonymní uživatel
28 příspěvků
23. 7. 2012   #7
-
0
-

#6 liborb
No a jak udělat, že to bude neopakovatelně? Vlastně ten server vytvoří hash, tudíž se ze strany klienta nedá změnit tudíž to heslo bude zahashováno podle toho klíče a bude to unikátní pro tu relaci že?

Mimochodem a ten jakože "první-unikátní" paket co se pošle - vlastně samotný hash, neměl by být taky nějak šifrovaný? Protože v případě že to někdo bude odposlouchávat a někdo se zrovna logne tak on může "podstrkovat" pakety a může je i správně šifrovat, nebo se pletu?

Nahlásit jako SPAM
IP: 149.255.82.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #8
-
0
-

jjj bude to unikátní pro tu relaci, tak to bylo myšleno. Pro každý soket jiný šifrovací klíč. Ono to bude neopakovatelné, ale  ty uvozovky měly ukazovat, že to tak být nemusí, že si můžeš vytvořit hash, který se dříve nebo později zopakuje, třeba pokud by byl příliš krátký (třeba těch tvých 5 znaků). No a pak sis asi nevšiml mojí poznámky, že veškerá komunikace je šifrovaná, takže i ta prvotní výměna paketů je šifrovaná.

Nahlásit jako SPAM
IP: 78.80.52.–
eximik0
Newbie
23. 7. 2012   #9
-
0
-

No a v čem šifrovat tu prvotní událost? :D

Co todle:

V klientu a serveru bude jeden pevně daný třeba 128znakový klíč. Server vybere 10náhodnejch znaků (z toho klíče), a pošle klientovi

|x|a|Novy_zahashovany_klic - x je start v tom pevně danym klíči, a je konec a pomoci toho se decryptuje tenhle novej klic pomoci nehoz bude probihat cela komunikace, popř. pro větší bezpečnost ten klic, kterej je zahashovanej tak po rozhasovani se treba vynecha 3. a 15. znak a např. každej 10. přenos se bude ten klíč měnit?

Bude to bezpečný nebo to ještě nejak nafistlovat... Třeba už do zahashovanýho kodu přidat před a za 3 nesmyslný znaky a pak je zas odebrat?

Jo a existuje v javě nějaká hotová třída pro takovejdle crypt a decrypt podle unikátního klíče? Koukal sem po netu,ale nenašel sem nic konkrétního

Nahlásit jako SPAM
IP: 149.255.82.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #10
-
0
-

Ta první komunikace bude probíhat pevně daným šifrováním, potřebuješ to na serveru nejenom zašifrovat, ale hlavně to v klientovi zase umět dešifrovat.

A s tím hledáním crypt/decrypt se poraď s googlem, však on ti nakonec poradí, alespoň se trochu pocvičíš :).

Nahlásit jako SPAM
IP: 78.80.52.–
eximik0
Newbie
23. 7. 2012   #11
-
0
-

Já narazil na jakýsi TripleDSA ale moc sem to nepobral... :)

Já bych potřeboval prostě jen crypt() a decrypt() :P Jen si to asi budu muset napsat sám hihi

Nahlásit jako SPAM
IP: 149.255.82.–
eximik0
Newbie
23. 7. 2012   #12
-
0
-

 Takže:

package exdev2.net.crypt;

import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


public class crypt {

    private static final String ALGORITHM = "AES";
    private static final int ITERATIONS = 2;

    public static String encrypt(String value, String myKey, String salt) throws Exception {
        Key key = generateKey(myKey);
        Cipher c = Cipher.getInstance(ALGORITHM);  
        c.init(Cipher.ENCRYPT_MODE, key);
  
        String valueToEnc = null;
        String eValue = value;
        for (int i = 0; i < ITERATIONS; i++) {
            valueToEnc = salt + eValue;
            byte[] encValue = c.doFinal(valueToEnc.getBytes());
            eValue = new BASE64Encoder().encode(encValue);
        }
        return eValue;
    }

    public static String decrypt(String value, String myKey ,String salt) throws Exception {
        Key key = generateKey(myKey);
        Cipher c = Cipher.getInstance(ALGORITHM);
        c.init(Cipher.DECRYPT_MODE, key);
  
        String dValue = null;
        String valueToDecrypt = value;
        for (int i = 0; i < ITERATIONS; i++) {
            byte[] decordedValue = new BASE64Decoder().decodeBuffer(valueToDecrypt);
            byte[] decValue = c.doFinal(decordedValue);
            dValue = new String(decValue).substring(salt.length());
            valueToDecrypt = dValue;
        }
        return dValue;
    }

    private static Key generateKey(String myKey) {
        byte[] kv = null;
        kv = myKey.getBytes();
        Key key = new SecretKeySpec(kv, ALGORITHM);
        return key;
    }
}

Máme:

encrypt(value, key,salt);

decrypt(value, key,salt);

-Value sou hodnoty které se (de)cryptuj

-key - je ten náš unikátní klíč, pokud je jinej než co byl použit při cryptování, nemůže se decryptovat (16 znaků snad postačí?)

-salt je vlastně náhodnej řetězec, nemá to vliv na crypt/uncrypt jen pokud zmeníme salt ale key je furt stejný tak vlastně výslednej hash vypadá uplně jinak, ale nehraje roli jestli máme stejný salt řetezec nebo ne, prostě na něm nezávisí vůbec decryptování, má sloužit jen jako jakési zmatení že každý poslání jakéhokoliv příkazu / dat se bude salt generovat nový řetězec, takže každá komunikace bude vypadat uplně jinak i když bude stejná a bude mít stejný key ...

Mám pravdu nebo se pletu? Je to částečně zkopčený a částečně upravený mnou...

Nahlásit jako SPAM
IP: 149.255.82.–
liborb
~ Redaktor
+18
Guru
23. 7. 2012   #13
-
0
-

Tvůj problém je ten, že chceš strašně moc vyřešit bezpečnost soketového spojení, ale v podstatě o té problematice nic nevíš. Nejlépe stáhnout nějaký kód, ani není potřeba vědět, co to dělá, hlavně když bude za dopoledne vyřešeno. Doufám, že nejsi členem nějakého týmu, který dělá novou verzi základních registrů pro státní správu nebo tak něco   .

Najdi si nějakou pěknou knihu o této problematice, přečti si jí, pak ještě jednou, no a pak se na ten tvůj problém a hlavně na řešení, která teď navrhuješ a závěry, které děláš, podívej ještě jednou.

Nahlásit jako SPAM
IP: 78.80.52.–
eximik0
Newbie
23. 7. 2012   #14
-
0
-

Ne jen se učim s javou a chi zkusit posílat data, dá se říct nic víc, chci jen odpověd, je to alespon částečně bezpečný? :D

Nahlásit jako SPAM
IP: 149.255.82.–
zlz
~ Anonymní uživatel
634 příspěvků
23. 7. 2012   #15
-
+1
-
Zajímavé

SSLSocket

Nahlásit jako SPAM
IP: 78.156.159.–
jano
~ Anonymní uživatel
53 příspěvků
23. 7. 2012   #16
-
+1
-
Zajímavé

#6 liborb imho s prepacenim toto je blbost a bezpecnost to vobec neriesi z kryptografickeho hladiska staci poznat to ako sa ten kluc z toho generuje a odchytit prvy paket a sme na zaciatku...

tento problem by sa teoreticky mal riesit asymetrickou(verejny a privatny kluc) kryptografiou ;) cize RSA alebo elypticke kryvky najprv server posle verejny kluc klientovy a klient verejny kluc serveru a ku kazdemu prikazu sa prida podpis ktory sa bude z kladat napriklad z mena uzivatela + id spravy zasifrovane ucastnikovym sukromnym klucom co druha strana dokaze skontrolovat a nikto to nedokaze podvrhnut ak neprelomi danu sifru... ina moznost je pouzitie roznych sifrovacich modov modov...

ale berte to len ako teoreticku vsuvku a zaujimavost :D

Nahlásit jako SPAM
IP: 85.135.160.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 29 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý