LINUX.ORG.RU

Openssl dsa шифрование


0

0

Не могу врубиться как зашифровать файл алгоритмом dsa
Вот rsa алгоритмом это делается так:

openssl rsautl -in file -out file.cr -keyin pubkey.pem -pubin -encrypt
то есть с помощью rsautl а вот для dsa я такой команды найти не могу. :(
Видимо я сильно туплю.

P.S. Заранее прошу прощения за тупой вопрос.


Так я понял

DSA (Digital Signature Algorithm) — алгоритм с использованием открытого ключа для создания электронной подписи, но не для шифрования (в отличие от RSA и схемы Эль-Гамаля).

Ясно теперь другой вопрос:
Вот я создал Секретный и публичный ключи с помощью dsa.

Как теперь шифровать/дешифровать данные на основе этих ключей?

demsi
() автор топика
Ответ на: комментарий от demsi

Разбираюсь в данной теме, и не могу врубиться.
Вот я хочу Зашифровать файл.

Читая про шифровку я понял что есть ассиметричные и симетричные алгоритмы.
Симетричными пользоваться достаточно просто.
Вот теперь пытаюсь разобраться с ассиметричными алгоритмами.
Читая википедию я понял что принцип действия такой:
Есть секретный и публичные ключи. Секретный для расшифровки публичный для шифровки.
Вот я создал публичный ключ с помощью алгоритма dsa. Теперь мне нужно зашифровать файл на основе этого ключа. Отсюда вытекает первый вопрос: Его нужно шифровать c помощью openssl rsautl ?

Далее предположим мне надо будет передать его кому-либо , и естественно надо чтобы он его расшифровал.
Получается я ему должен дать свой сгенерированный секретный ключ? Но я так понял этого делать нельзя. Так как передается только публичный ключ.

Вот такие непонятки выходят.

demsi
() автор топика
Ответ на: комментарий от demsi

Так я понял
Как теперь шифровать/дешифровать данные на основе этих ключей?

Ты не понял. Прочти вдумчиво свою цитату. DSA для подписывания файлов а не для шифрования. Кури gpg уже.

greek_31 ★★
()
Ответ на: комментарий от greek_31

А средствами openssl этого нельзя сделать ?
Я понял что сама инфа шифруется симметричным алгоритмом.
Потом пароль на эту инфу шифруется публичным ключом.
Затем секретным ключом расшифровывается пароль.
А потом с помощью этого пароля расшифровывается инфа

Получается пароль просто записывается в текстовой файл а потом шифруется публичным ключом ?

Я опять не так понял ? Получается нужно два пароля ? Один задавать при шифровке инфы, а второй при шифровке файла с паролем ?

demsi
() автор топика
Ответ на: комментарий от demsi

Мы всё еще о DSA? Потому что твои вопросы относятся к RSA...

Оба алгоритма асимметричные, но служат разным целям.

При RSA ты, при шифровании, пропускаешь информацию через закрытый ключ получаешь шифротекст. При расшифровка возможна только открытым ключом.

При DSA ты подписываешь сообщение. При подписании своим получаешь что-то вроде хеша сообщения/файла/письма, который может быть сделан только твоим ключом. Соответственно, эту подпись можно проверить только открытым ключом. Открытые ключи можно и нужно публиковать в интернете.

Несколько примеров, что твои вопросы не имеют смысла. 1. Подписание исходников программ. ftp://ftp.proftpd.org/distrib/source/ Файлы *.asc и есть файлы, содержащие подписи. 2. В сообщениях e-mail так же частенько содержаться цифровая подпись. 3. gpg --sign

greek_31 ★★
()
Ответ на: комментарий от greek_31

При RSA ты, при шифровании, пропускаешь информацию через закрытый ключ получаешь шифротекст. При расшифровка возможна только открытым ключом.

Пардон шифрование открытым расшифровка закрытым.

greek_31 ★★
()
Ответ на: комментарий от greek_31

У меня такое ощущение что вы не отвечаете на мой вопрос.
Естественно я неправильно задаю вопросы так как не знаком с данной темой.
Все мои знания по теме ограничены маном по openssl, статьей про него же на opennet.ru а также статьей в википедии
«шифрование» - http://ru.wikipedia.org/wiki/Шифрование

«Криптосистема с открытым ключом» - http://ru.wikipedia.org/wiki/Асимметричное_шифрование

В системах с открытым ключом используются два ключа — открытый и закрытый, связанные определенным математическим образом друг с другом. Открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для шифрования сообщения и для проверки ЭЦП. Для расшифровки сообщения и для генерации ЭЦП используется секретный ключ.[21] Данная схема решает проблему симметричных схем, связанную с начальной передачей ключа другой стороне. Если в симметричных схемах злоумышленник перехватит ключ, то он сможет как «слушать», так и вносить правки в передаваемую информацию. В асимметричных системах другой стороне передается открытый ключ, который позволяет шифровать, но не расшифровывать информацию. Таким образом решается проблема симметричных систем, связанная с синхронизацией ключей

Естественно отсюда я делаю логический вывод что так как dsa является асимметричным алгоритмом шифрования то его можно использовать по выше указанной схеме.
После прочтения статьи в вики про dsa я понял что он для подписывания.
Я сразу же исправил суть вопроса.

Итак учитывая практическую задачу, основанную на цитате приведенную из вики.
А именно мне надо Сделать публичный и секретный ключи, затем зашифровать данные(как сказано в вики с помощью публичного ключа) затем расшифровать данные(как сказано в вики с помощью секретного ключа).

Могу сказать еще проще - мне нужно безопасно передать информацию размером в 1 GB.
Для этого я хочу использовать Асимметричное шифрование (с открытым ключом).
Отсюда следует, что там куда её я передаю, должны с генерировать пару ключей, и передать мне открытый ключ. Затем я должен зашифровать данные с помощью того ключа. И передать им инфу в зашифрованном виде.
Я вам пытаюсь объяснить что в теории я понял эту схему, а на практике нет.

demsi
() автор топика
Ответ на: комментарий от demsi

У меня такое ощущение что вы не отвечаете на мой вопрос.

Естественно я неправильно задаю вопросы так как не знаком с данной темой. Все мои знания по теме ограничены маном по openssl, статьей про него же на opennet.ru а также статьей в википедии «шифрование» - http://ru.wikipedia.org/wiki/Шифрование

Криптография такая тема, что учится нужно по книгам. (Рекомендую Книгу шифров Сингха).

Могу сказать еще проще - мне нужно безопасно передать информацию размером в 1 GB.

Для этого я хочу использовать Асимметричное шифрование (с открытым ключом). Отсюда следует, что там куда её я передаю, должны с генерировать пару ключей, и передать мне открытый ключ. Затем я должен зашифровать данные с помощью того ключа. И передать им инфу в зашифрованном виде. Я вам пытаюсь объяснить что в теории я понял эту схему, а на практике нет.

Хочешь практики пожалуйста... Классический пример шифрования про Боба и Алису(Я немного изменил в Васю и Лизу): Вася Пупкин получатель сообщений. Лиза отправитель.

Сперва Вася создает свою пару ключей:

$ gpg --gen-key
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 1024
Requested keysize is 1024 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Vasya Pupkin
Email address: pupkin@example.net
Comment: l33t
You selected this USER-ID:
    "Vasya Pupkin (l33t) <pupkin@example.net>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

You don't want a passphrase - this is probably a *bad* idea!
I will do it anyway.  You can change your passphrase at any time,
using this program with the option "--edit-key".

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
                                                                                                                                 
We need to generate a lot of random bytes. It is a good idea to perform                 
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key 4247BF18 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   1024R/4247BF18 2012-11-30
      Key fingerprint = F358 808E 863E 1F3A 1036  E429 AA01 4558 4247 BF18
uid                  Vasya Pupkin (l33t) <pupkin@example.net>
sub   1024R/1A26105A 2012-11-30
Проверяем:
$gpg --list-keys
/home/heretic/.gnupg/pubring.gpg
--------------------------------
pub   1024R/4247BF18 2012-11-30
uid                  Vasya Pupkin (l33t) <pupkin@example.net>
sub   1024R/1A26105A 2012-11-30

$ gpg --list-secret-key
/home/heretic/.gnupg/secring.gpg
--------------------------------
sec   1024R/4247BF18 2012-11-30
uid                  Vasya Pupkin (l33t) <pupkin@example.net>
ssb   1024R/1A26105A 2012-11-30
Далее экспортируем ключ в файл для передачи:
vasya$gpg -armor --export > pupkin.key
vasya$cat pupkin.key 
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.19 (GNU/Linux)

mI0EULkIuwEEAMOia62s39m6jnUCBgXYHDItDEDsbBqT199/grgwcZGILkO5MqWO
T6cbv/YyhkDXxHuHliJZ/VBdlH06WPY+Jte1uCqwZsPivtFrP5ifVPWEcNnE+H7q
ilGJ1WHS4ujbN7aPCbhegUB1Y9zESUiADw5e77N1swYuOZjYpV4YDVizABEBAAG0
KFZhc3lhIFB1cGtpbiAobDMzdCkgPHB1cGtpbkBleGFtcGxlLm5ldD6IuQQTAQIA
IwUCULkIuwIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEKoBRVhCR78Y
lTID/1F09lc1CjtABfZlh8ijw9fd3/BtSYkMP6UwsWhUlo++CMkMlk8EAs9eI4du
wcYquAJseAKDd46u1jwp7yGCeghLTeRRRR4JwhxZLP6MY+LsH7KftoQQJG3WMV2e
5jV3ESyMwk4DvXyW7zZ3wAAY1YipUDJnHqrI9DoZvG8q4zrhuI0EULkIuwEEALu0
H7UK2uhVqRYjo2gSAK8/J5TJJdEGng+/O/lZdKvs4FkN4j2VLDVHiO+8e3D0HbeY
T/ocTx8vJBiWMLXZgsEbKQvuV69vt/S52ammlBSOUbZCgI+mt/LQi3wQku51zOLr
l37r1PPH0f0RH+1vKREJM2SBK13bed5YkXPvXQkpABEBAAGInwQYAQIACQUCULkI
uwIbDAAKCRCqAUVYQke/GF0AA/9c9IT1I44qwkSz+Be8o9orse0LlsS/xPlZl30C
y5k6RCh0ifwdlX2tFcsJ2Ga4bGCqCUgU7gsF+UnsV9r279aKgPJHC2MHoK4615OZ
5w4a5LSnI8GXYbWMNms38pI8BpekmrJ74bneB9sr31eiVNGQYcpoRv8Dvd7kFzPn
NREYeQ==
=+kfl
-----END PGP PUBLIC KEY BLOCK-----
Далее Вася передает свой ключ Лизе. Можно опубликовать на открытых серверах ключей, либо послать по почте и т.д. Лиза импортирует Васин ключ к себе:
lisa $gpg --import pupkin.key 
gpg: ключ 4247BF18: открытый ключ "Vasya Pupkin (l33t) <pupkin@example.net>" импортирован
gpg: Всего обработано: 1
gpg:               импортировано: 1  (RSA: 1)

Проверка:
lisa $ gpg --list-keys
gpg: проверка таблицы доверий
gpg: не найдено абсолютно доверяемых ключей
/home/heretic2/.gnupg/pubring.gpg
---------------------------------
pub   1024R/4247BF18 2012-11-30
uid                  Vasya Pupkin (l33t) <pupkin@example.net>
sub   1024R/1A26105A 2012-11-30
Далее создает и шифрует сообщение сообщение:
echo "Привет! Встретимся сегодня? Буду ждать на площади в 18-00" > message.txt
lisa $ gpg --armor --encrypt message.txt 
Не задан User ID. (можете использовать "-r")

Текущие получатели:

Введите User ID.  Пустая строка для завершения: 1A26105A
gpg: 1A26105A: Нет свидетельств того, что данный ключ принадлежит пользователю указанному в User ID ключа

pub  1024R/1A26105A 2012-11-30 Vasya Pupkin (l33t) <pupkin@example.net>
 Отпечаток главного ключа: F358 808E 863E 1F3A 1036  E429 AA01 4558 4247 BF18
      Отпечаток подключа: CDB2 4A01 2F0D 8166 C48D  5FB6 DAF3 070D 1A26 105A

Нет уверенности в том, что ключ принадлежит человеку указанному
в User ID ключа.  Если Вы ТОЧНО знаете, что Вы делаете,
можете ответить на следующий вопрос утвердительно.

Все равно использовать данный ключ? (y/N) y

Текущие получатели:
1024R/1A26105A 2012-11-30 "Vasya Pupkin (l33t) <pupkin@example.net>"

Введите User ID.  Пустая строка для завершения: 


lisa $ cat message.txt.asc 
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.11 (GNU/Linux)

hIwD2vMHDRomEFoBBACQhsEls8vwmwGXcONMmTVDUrEpXHhZq0CHRQTjp5NA3yPu
H9TgmIY1H7RxmYmAPcLY4Jij7IwG5xBfhSL/3jFO+rYu6/J4xSlmNDNOefE28TBS
h92Y6NySj6VI55UP54FhwemnGMs33BtFMwpIRg6GDLl5qv73yTFzdLEnjSOrrNKn
AQ/XVdL236TafJxOgVMXT4v5wU/zniq0CdkKvvGiUviqA5b+9MXDLMnLEI6wt6SB
GktQizcFeCmUlL2yG4D5m+h6SVfIbGyolXUiGfVoqR+Lkt7+iskkFzGOiNOdl7GL
gcyQ3PbCkKGFsUdW8rK3y42PwTQTueeCl3UsLS9sh9MT7oDl9WwVVKU4+fIWW84/
v3dcb8ttaujSRx4V0m937B8jJ1O+X+0=
=IoIr
-----END PGP MESSAGE-----
После чего спокойно посылает его по любому небезопасному каналу.

Вася расшифровывает сообщение своим закрытым ключом:

 vasya$gpg --output message.txt --decrypt message.txt.asc 
gpg: encrypted with 1024-bit RSA key, ID 1A26105A, created 2012-11-30
      "Vasya Pupkin (l33t) <pupkin@example.net>"
vasya$cat message.txt
Привет! Встретимся сегодня? Буду ждать на площади в 18-00
vasya$

greek_31 ★★
()
Ответ на: комментарий от demsi

Твой собеседник создает ключи и передает тебе публичный, а приватный оставляет себе. Ты шифруешь публичным, он расшифровывает.

Legioner ★★★★★
()
Ответ на: комментарий от greek_31

Далее Вася передает свой ключ Лизе. Можно опубликовать на открытых серверах ключей, либо послать по почте и т.д. Лиза импортирует Васин ключ к себе

no no no. Только по защищенному от подмены каналу нужно передавать открые ключи. Иначе, если в игру вступает Ева, то mitm.

Если достоверно защищенного от подмены канала нет, то ключи нужно подписывать ( по хорошему - всегда нужно ), но здесь jmp $тудаже. Подпись должна производится _только доверенным_ ключём.

anonymous
()
Ответ на: комментарий от anonymous

Да. Мой косяк. Но, как я понимаю, переходит уже немного в другую сторону обсуждения. Вообще, Алису все равно предупреждают при --list-keys: gpg: не найдено абсолютно доверяемых ключей

greek_31 ★★
()
Ответ на: комментарий от demsi

Могу сказать еще проще - мне нужно безопасно передать информацию размером в 1 GB.

Какое отношение размер данных имеет к выбору асимметричного алгоритма? Все равно зашифровывается сеансовый ключ, а уж данные потом гонятся быстрым симметричным алгоритмом.

В общем, используйте связку RSA_OAEP+AES_GCM - не прогадаете с безопасностью. Ключ RSA можно взять побольше, если мучает паранойя, а так 2048 бит хватит за глаза.

segfault ★★★★★
()
Ответ на: комментарий от demsi

Если нет уже развёрнутой своей PKI или например верисайновских сертификатов у обоих заговорщиков, то все эти ассиметричные алгоритмы сами по себе мало чем помогут, как уже отметил анонимус выше Openssl dsa шифрование (комментарий)

af5 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.