Шифрование переписки

Discussion in 'Безопасность и Анонимность' started by qaz, 24 Nov 2013.

  1. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    Я тут пару недель назад написал скрипт для шифрования текста, кторое может пригодится при переписке в аськах, джабберах, емейлах, и тп, тоесть при передачи информации которую хотелось бы скрыть от третех лиц, например номер кошелька или типа того(думаю не нужно обьяснять то, какие люди в фурашках могут читать сообщения в подобных серисах :D ). хз велосипед это или нет, но мне способ показался быстрым и удобным, если баян то прошу сильно не пинать :)



    пример

    небольшое FAQ:

    Например, вы переписываетесь с кем-то по аське с номером 6648222, заходите по той ссылке, что я дал, первым делом нажимаете на кнопку generate key - появится случайно сгенерированный ключ, вставляете его в поле возле кнопки use key и нажимаете на неё. Всё, теперь скриптом будет использоваться сгенерированный ключ, далее нужно передать ключ вашему собеседнику.

    Это делается так: в поле рядом с кнопкой leave the key for пишете, например, его номер аськи 6648222 и нажимаете на кнопку, говорите собеседнику, что ключевым словом будет его номер аськи(можно писать что угодно), он заходит, вводит свой номер возле кнопки take a left key и нажимает её, ему автоматом выбирается тот ключ, что вы ему оставили.

    Сам ключ сразу же из БД удаляется. Всё, можно переписываться. Думаю объяснять, что делают кнопки decode и encode, не нужно))
    © http://mh-proxy.ru/blog/index.php?mod=read&id=35




    Исходник:

    PHP:
    <? 

    function 
    get_db() { 
    $dbhost "localhost"
    $dbname ""
    $dbuser ""
    $dbpass ""
    $link mysql_connect($dbhost,$dbuser,$dbpass); 
    mysql_select_db($dbname,$link); 


    mysql_query ("CREATE TABLE IF NOT EXISTS xchat(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,forsend varchar(50), needkey varchar(30))") ; 





    if( isset(
    $_POST['takeleave']) and $_POST['takeleave'] == "need") { 

    get_db(); 


    $info $_POST['info']; 



    if( 
    strlen($info) > 50 ) { 
    $error2 "very long contact data, a maximum of 50 characters"


    if( 
    $error == "" ) { 
    $good_info md5($info); 
    $sql_result mysql_fetch_assoc(mysql_query("select `needkey` from `xchat` where `forsend` = '$good_info' ")); 
    mysql_query("delete from `xchat` where `forsend` = '$good_info'"); 
    if( 
    $sql_result[needkey] == "" ) { 
    $error2 "nothing is left to you"
    }else{ 
    $f basename(__FILE__); 
    header("location:$f?key=$sql_result[needkey]"); 
















    if( isset(
    $_POST['leave']) and $_POST['leave'] == "need") { 

    get_db(); 

    $key $_POST['key']; 
    $info $_POST['info']; 


    $error ""
    if( !
    preg_match("/^[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}$/"$key) ) { 
    $error "malformed key"


    if( 
    strlen($info) > 50 ) { 
    $error "very long contact data, a maximum of 50 characters"


    if( 
    $error == "" ) { 
    $good_info md5($info); 
    mysql_query("insert into `xchat`(`forsend`,`needkey`) values ('$good_info','$key')"); 

    $error "key has been successfully entered into the database"




    if( isset(
    $_POST['generate']) and $_POST['generate'] == "need") { 

    $b = array('a','b','c','d','e','f','g','i','h','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'); 
    $rand1 rand(0,24); 
    $rand2 rand(0,24); 
    $rand3 rand(0,24); 
    $rand4 rand(0,24); 
    $rand5 rand(0,24); 
    $rand6 rand(0,24); 
    $rand_str rand(1,2)."-".$b[$rand1].":".rand(3,4)."-".$b[$rand2].":".rand(5,6)."-".$b[$rand3].":".rand(7,8)."-".$b[$rand4].":".rand(9,10)."-".$b[$rand5].":".rand(11,12)."-".$b[$rand6]; 



    if( isset(
    $_POST['submit']) ) { 

    $mod $_POST['submit']; 
    $string $_POST['text']; 
    $key $_POST['key']; 
    $error ""
    if( !
    preg_match("/^[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}:[0-9]{1,2}-[a-z]{1,2}$/"$key) ) { 
    $error "Error: Invalid key"


    if( 
    strlen($string) < or strlen($string) > 450 ) { 
    $error "Error: Text must be at least one character and no more than 450"



    $array_key = array(); 
    $ex1 explode(":",$key); 
    foreach(
    $ex1 as $str) { 
    list(
    $nnum,$kkey) = explode("-",$str); 
    $array_key[$nnum] = $kkey








    if( 
    $mod == "encode" and $error == "") { 



    $base_string base64_encode($string); 

    $new_string ""
    $len strlen($base_string); 


    for(
    $i=0;$i<=$len;$i++) { 

    if( 
    array_key_exists($i,$array_key) ) { 
    $need_str $array_key[$i].$base_string[$i]; 
    }else{ 
    $need_str $base_string[$i]; 


    $new_string .= $need_str






    $result strrev($new_string); 



    $len strlen($result); 
    $new_string ""

    for(
    $i2=0;$i2<=$len;$i2++) { 

    if( 
    array_key_exists($i2,$array_key) ) { 
    $need_str $array_key[$i2].$result[$i2]; 
    }else{ 
    $need_str $result[$i2]; 


    $new_string .= $need_str


    $result $new_string


    }elseif(
    $mod == "decode" and $error == ""){ 

    $first 0
    $new_array_key = array(); 

    ksort($array_key); 
    foreach(
    $array_key as $num => $key) { 
    if(
    $first == 0){ 
    $first 1
    $num $num
    }else{ 
    $num $num+$first
    $first $first +1

    $new_array_key[$num] = $key







    $new_string ""
    $len strlen($string); 

    for(
    $i=0;$i<=$len;$i++) { 


    if( 
    array_key_exists($i,$new_array_key) ) { 
    $need_str ""
    }else{ 
    $need_str $string[$i]; 


    $new_string .= $need_str








    $result strrev($new_string); 


    $len strlen($result); 
    $new_string ""



    for(
    $i2=0;$i2<=$len;$i2++) { 


    if( 
    array_key_exists($i2,$new_array_key) ) { 
    $need_str ""
    }else{ 
    $need_str $result[$i2]; 


    $new_string .= $need_str





    $result $new_string


    $result base64_decode($new_string); 



    if( 
    $result == "" ){$result $error;} 

    ?> 

    <html> 
    <body> 
    <style type="text/css"> 
     body { 
    background: #000000; 
     } 
    </style> 

    <table border = "6" width = "100%" height = "100%" > 


    <td width = "70%"><div align = "center"> 
    <form action = "" method="post"> 
    <font color = "green" size = "6">Text entry field</font><br><br> 
    <textarea name = "text" cols = "120" rows = "25" style="background:#006400" style="color:red" ><? echo $result ?></textarea><br><br><br> 
    <input type = "hidden" name = "key" value = "<? echo $_GET['key']; ?>" style="background:green" > 
    <input type = "submit" name = "submit" value = "encode" style="background:green" > 
    <input type = "submit" name = "submit" value = "decode" style="background:green" > 
    </div> 
    </form> 
    </td> 

    <td width = "30%" > 
    <form action = "" method = "get"> 
    <input type = "text" name = "key" value = "<? echo $_GET['key'];?>" <? if(!isset($_GET['key']) ){echo "style=\"background:red\"";}else{echo "style=\"background:yellow\"";} ?> > 
    <input type = "submit" value = "use key" style="background:green" > 
    </form> 

    <br><br> 

    <form action = "" method = "post"> 
    <input type = "hidden" name = "generate" value = "need"> 
    <input type = "text" name = "key" value = "<? echo $rand_str;?>" style="background:green"> 
    <input type = "submit" value = "generate key" style="background:green" > 
    </form> 

    <br><br> 

    <form action = "" method = "post"> 
    <input type = "hidden" name = "leave" value = "need"> 
    <input type = "hidden" name = "key" value = "<? echo $_GET['key'];?>" style="background:green"> 
    <input type = "submit" value = "leave the key for" style="background:green" > 
    <input type = "text" name = "info" value = "" style="background:green"> 
    <? 
    if ( preg_match("/database/",$error) ) { $color = "yellow"; }else{ $color = "red"; } 

    echo "<br><font color = '".$color."'>".$error."</font>"; 

    ?> 
    </form> 


    <br><br> 

    <form action = "" method = "post"> 
    <input type = "hidden" name = "takeleave" value = "need"> 
    <input type = "text" name = "info" value = "" style="background:green"> 
    <input type = "submit" value = "take a left key" style="background:green" > 
    <? 
    echo "<br><font color = 'red'>".$error2."</font>"; 
    ?> 
    </form> 
    <br><br><br><br> 
    <font color = "red">© mh-coder <a href="http://mh-proxy.ru/blog/">blog</a></font> 
    </td> 


    </table> 
    </body> 
    </html>
     
    2 people like this.
  2. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,414
    Likes Received:
    911
    Reputations:
    863
    А чем джабер не устроил? или плагин OTR? или еще какие доп. плагины по криптованию переписки? к чему создовать новый велосипед?

    P.S: Да и к тому же использовав числовой ключ является наислабейшим звеном в криптосистемах... темболие аську аппонента!
     
    _________________________
    #2 winstrool, 24 Nov 2013
    Last edited: 24 Nov 2013
  3. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    нус я сомневаюсь что сообщения в джабберах не храниятся на серваках и никем не читаются, насёт плагинов - незнал,
    а собеседнику тоже надо будет же теже плагини походу ставить?
    не ошень шарю в шифровании, а как вобще там ключ передаётся чтобы сообщение было разшифровано уполучателя?

    P.S: ключ не числовой, номер аськи является лишь ключевым словом для получения оставленого ключа
     
  4. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    В этом и суть шифрования, на сервере сохраняется зашифрованный текст сообщения, который без ключей не имеет толка, а расшифровка происходит на клиенте, самое главное чтобы ключ при передаче собеседнику не перехватили.
     
  5. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    учитывая comp систему - которая стоит на магистральных каналах - она может и всё что к myqsl идти - записывать, значит ключи могут перехвачены быть
     
    #5 GAiN, 24 Nov 2013
    Last edited: 24 Nov 2013
  6. UXOR

    UXOR Member

    Joined:
    16 Aug 2013
    Messages:
    44
    Likes Received:
    7
    Reputations:
    6
    В данном случае криптостойкость системы очень слаба-самая примитивная атака "Человек посередине".
    Советую ознакомиться для начала с понятием протокола обмена ключами Диффи-Хэлмана и реализовать этот алгоритм (хотя в C++ есть отдельная библиотека).
    Любая работа должна оцениваться! Молодец,что пытаешься.
     
  7. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,414
    Likes Received:
    911
    Reputations:
    863
    Самае надежная передача ключа, это шепнуть на ухо аппоненту, да и то перехватить могут!
     
    _________________________
    1 person likes this.
  8. Империал

    Joined:
    11 Mar 2010
    Messages:
    1,224
    Likes Received:
    58
    Reputations:
    1
    Данными с веб-сервером можно обмениваться по протоколу https тогда ничего перехвачено не будет
     
  9. -=Cerberus=-

    -=Cerberus=- κρυπτός γράφω

    Joined:
    29 Apr 2012
    Messages:
    1,321
    Likes Received:
    930
    Reputations:
    391
    угу только есть еще BREACH и BEAST.

    единственный надежный способ передать ключи это поместить их в большой файл скажем размером с фильм, залить его куда нибудь. дать его скачать и сразу удалить, а потом сказать вашему собеседнику на какой позиции в файле лежат ключи :)
    суть в том, что большие файлы не хранят - дороговато это пока...

    но это только если ваш канал уже изначально не пасут, тогда весь трафик будет хранится и сможет быть проанализирован.

    п.с шепнуть на ухо и сразу пристрелить))) вдруг в ухе микрофон
     
  10. Vlad_CZ

    Vlad_CZ New Member

    Joined:
    14 Jul 2013
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    secserv.me

    Как Вам записки secserv.me?
    Тоже хорошая темка )

    Ну если Вы нам не верите - создавайте сообщения с общим секретом - тогда даже если мы копируем ваши сообщения - про ваши общий секрет мы все равно не знаем )

    Он только на клиенте.
     
    #10 Vlad_CZ, 12 Dec 2013
    Last edited: 12 Dec 2013
  11. Alexandr II

    Alexandr II -=ImperatoR=-

    Joined:
    28 Dec 2007
    Messages:
    1,067
    Likes Received:
    670
    Reputations:
    87
    если вами заинтересуются, никакой ключ не поможет...
    а так в любом случае каждая переписка фильтруется под определенные словосочетания... читать всю переписку каждого пипла - это жестоко..
     
  12. Vlad_CZ

    Vlad_CZ New Member

    Joined:
    14 Jul 2013
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Если заинтересуются - никто не спорит что паяльник в жопу не отменяют .

    Но логи почты, жабы и скайпа будут в убитых ссылках - и только Вам будет известно что там было написано - подтвердить не смогут правда или нет.

    Защищяйтесь секретным паролем на ссылку и все будет ок )
     
  13. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    https вроде как тоже не гарант от защиты перехвата
     
  14. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    FAILed concept by all means.

    годная реализация идеи опубликована на Асечка стопицот лет тому назад - АйСиКью/ICQ. Безопасность. часть I - PGP.


    sslstrip, без 'вроде/как'