[Php] usb

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

[Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-12 9:25:29

Подскажите пожалуйста как можно реализовать такую весч на usb флешки есть некий фаил допустим key так вот на сервоке тотже фаил в mysql допустим есть электронный документ и его нужно подписать чел засовывает свою флешку жмет подписать ключ на флешке проверяется с ключем в БД если подходит все ОК.
Мне весь скрипт не нужен нужен тока по проверки ключевых носителе (флешки) :smile: я просто не знаю как это реализовать. Спасибо

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: usb

Непрочитанное сообщение Alex Keda » 2010-10-12 10:41:07

язык какой?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: usb

Непрочитанное сообщение ProFTP » 2010-10-12 11:09:28

ruslanstep1 писал(а):чел засовывает свою флешку жмет подписать ключ на флешке проверяется с ключем в БД если подходит все ОК.
зачем из БД? какой смысл?
ключ должен быть в прогармме закодированный...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: usb

Непрочитанное сообщение ruslanstep1 » 2010-10-12 11:23:17

Язык php а БД для сровнения ключа на флехе и БД

BSD_daemon
ефрейтор
Сообщения: 63
Зарегистрирован: 2010-10-09 21:51:17
Откуда: Из тех ворот откуда весь народ

Re: usb

Непрочитанное сообщение BSD_daemon » 2010-10-12 19:54:20

ruslanstep1 писал(а):Язык php а БД для сровнения ключа на флехе и БД
Не совсем понятен метод криптографии, если вы сравниваете что то с чем то, то это симметричное крипто, хотя для подписи обычно используют асимметричный алгоритм, а там все довольно просто, в БД публичный ключ(который и не надо прятать), а на флэхе приватный. Если же симметрия, то сравнивать в лоб ключ с ключом - это дыра, которая легко трассируется.
I also known as: "Нефиг_чем_заняться"

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: [Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-13 12:13:54

куда тогда надо копать чтоб это реализовать

BSD_daemon
ефрейтор
Сообщения: 63
Зарегистрирован: 2010-10-09 21:51:17
Откуда: Из тех ворот откуда весь народ

Re: [Php] usb

Непрочитанное сообщение BSD_daemon » 2010-10-13 19:13:50

ruslanstep1 писал(а):куда тогда надо копать чтоб это реализовать

Код: Выделить всё

<?php

$data = "***BASF это вовсе не химический концерн, это - Beer And Sex Forever***";

/*********** берем ключи из файлов ******************************
$pubkey1='/mnt/hddname/......../crt/public-key.crt'; // путь к публичному ключу
$prvkey1='/mnt/flashka/......../key/private.key';    // путь к приватному ключу

$fp = fopen($pubkey1, "r");
$public_key = fread($fp, 8192);
fclose($fp);

$fp = fopen($prvkey1, "r");
$private_key = fread($fp, 8192);
fclose($fp);
*****************************************************************/

// ***************** Или можно захардкодить вместо чтения из файлов

$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBO...................................
........................................
........................................
..................................ZFb5CI
-----END RSA PRIVATE KEY-----
EOD;
$public_key = <<<EOD
-----BEGIN PUBLIC KEY-----
MFww.....................................................
.........................................................wEAAQ==
-----END PUBLIC KEY-----
EOD;
// ****************************************************************

$binary_signature = "";

// подписываем
openssl_sign($data, $binary_signature, $private_key, OPENSSL_ALGO_MD5);  

echo "<pre>Исходные данные которые будут подписаны:\n--------------------------------\n{$data}\n--------------------------------\n";
echo "Подпись:\n" . chunk_split(base64_encode($binary_signature)) . "\n";


echo "----------- Результат проверка подписи и данных --------------\n";

//$data = $data . '===Левые буковки===';    // проверка искаженных данных
$ok = openssl_verify($data, $binary_signature, $public_key, OPENSSL_ALGO_MD5);

if ($ok == 1) {
    echo "Данные не подменены, то бишь валидные. Подпись тоже валидная(приватный ключ сходятся с публичным)\n";
} elseif ($ok == 0) {
    echo "Какая-то сцука подменила текст, сообщение не валидно\n";
} else {
    echo "Ошибка проверки подписи\n";
}

echo "</pre>";
?>
I also known as: "Нефиг_чем_заняться"

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: [Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-14 9:59:42

спасибо ща посмотрю :smile:

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: [Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-14 10:09:02

вопрос как сделать эти ключи public-key.crt'; /private.key'; :pardon:

BSD_daemon
ефрейтор
Сообщения: 63
Зарегистрирован: 2010-10-09 21:51:17
Откуда: Из тех ворот откуда весь народ

Re: [Php] usb

Непрочитанное сообщение BSD_daemon » 2010-10-14 21:10:08

ruslanstep1 писал(а):вопрос как сделать эти ключи public-key.crt'; /private.key'; :pardon:
Гхм...
Ну там такая же технология как и в HTTPS.
Читайте здесь:
http://security.ncsa.illinois.edu/resea ... enssl.html
или
http://www.madboa.com/geek/openssl/#cert-self

ключики чтоб побаловаться можете генернуть здесь в онлайн
http://www.mobilefish.com/services/ssl_ ... icates.php

Технология в общем то простая.
Есть центры сертификаци, так называемые CA( - certificate authority ) их задача подтвердить, как третье лицо валидность того, что ключи принадлежат действительно тому, кому они выданы(в зависимости от типа сертификата, валидность может проверяться от банальной проверки по eMail и вплоть до того, что надо будет показать свой паспорт и еще кучу ксив)
Как это работает:
Вы генерируете свой приватный ключ(контент которого никто и никогда не должен увидеть), на его базе генерируется CSR - это как бы будущий ваш публичный ключ и отправляете его в СА, где они за денюшку подпишут его своим ключом, предварительно проверив who you are, после чего вышлют вам подписанный ими ваш публичный ключ, который не есть секрет и может быть расположен публично, но использовать его для раскодировки сможете только вы.
(Грубо говоря это как типа взять рубль, разорвать его на миллиард маленьких клочков, тщательно перемешать и половину оставить у себя, а вторую половину выставить на показ. В этом случае любой может закодировать сообщение вашим публичным ключом, но раскодировать его сможете только вы, так как только у вас есть вторая половина огрызков рубля, которые слепив вместе, можно раскодировать сообщение.)
Т.е. один из ключевых моментов технологии является наличие третьей стороны, подписавшей сертификат. Перед тем как вам отправить сообщение, ваш публичный ключ проверяется с СА, на предмет того, что он действительно принадлежит вам.

Есть два других варианта:
1. Вы не хотите платить до сотни баксов в год, только за то, чтоб СА подписал ваш публичный ключ, тогда вы генерируете self signed сертификат, т.е. вы сами себе становитесь СА и сами же себя подтверждаете. Такой публичный ключ не считается доверяемым, т.к. его никто не перепроверил, а значит его можно в теории подменить.(К сожалению масса российских почтовых серверов работают именно с такими сертификатами, из-за чего приходится пропускать почту с любых таких серваков или поименно заносит их в белые листы)
2. Второй вариант - воспользоваться бесплатным СА, который распознается во всех почтовых клиентах и браузерах. Находится он здесь: http://cert.startcom.org/

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

Ну вообщем это все так, - вкраце о несимметричной криптографии ака SSL/TLS, там еще есть прибамбасы и нюансы в виде CRL и прочей херни
I also known as: "Нефиг_чем_заняться"

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: [Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-15 7:24:10

спасибо большое Вы мне очень помогли :drinks:

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: [Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-15 18:05:40

В общем спасибо большое мне это очень помогла

Код: Выделить всё

<?php
echo'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$data = "прикол прикол";

// открываем ключи
$fp = fopen("/mnt/... /server/private.pem", "r");
$priv_key = fread($fp, 8192);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);

// подписываем
openssl_sign($data, $signature, $pkeyid);

// освабождаем память
openssl_free_key($pkeyid);
echo "<pre>Исходные данные которые будут подписаны:\n--------------------------------\n{$data}\n--------------------------------\n";
echo "Подпись:\n" . chunk_split(base64_encode($signature)) . "\n";

$fp = fopen("/mnt/../flexa/public.pem","r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
// устанавливаем, okay подпись или нет
$ok = openssl_verify($data, $signature, $pubkeyid);
echo "----------- Результат проверка подписи и данных --------------\n";
if ($ok == 1) {
    echo "Данные не подменены, то бишь валидные. Подпись тоже валидная(приватный ключ сходятся с публичным)\n";
} elseif ($ok == 0) {
    echo "Какая-то сцука подменила текст, сообщение не валидно\n";
} else {
    echo "Ошибка проверки подписи\n";
}
openssl_free_key($pubkeyid);
echo "</pre>";
?>
вот теперь все ништяк работает

ruslanstep1
мл. сержант
Сообщения: 92
Зарегистрирован: 2010-04-14 11:40:46

Re: [Php] usb

Непрочитанное сообщение ruslanstep1 » 2010-10-15 18:05:58

прости помогло