- 1
- 2
- 3
- 4
- 5
- 6
- 7
require 'aes'
message = "Super secret message"
key = "password"
encrypted = AES.encrypt(message, key) # RZhMg/RzyTXK4QKOJDhGJg==$BYAvRONIsfKjX+uYiZ8TCsW7C2Ug9fH7cfRG9mbvx9o=
decrypted = AES.decrypt(encrypted, key) # Super secret message
roman-kashitsyn 13.01.2017 22:31 # +3
barop 13.01.2017 22:38 # +2
С другой стороны автор поста открыл для себя хекс, и узнал что протоколы шифрования обычно оперируют байтами, а не буквами хуйпоймикакой кодировки, а это полезное знание для программиста.
1024-- 14.01.2017 02:34 # −1
Но ведь это протоколы, а не конкретные реализации.
А вообще, пример поучителен и полезен. Бесед о потенциальных дырах никогда не бывает много.
CHayT 13.01.2017 22:55 # +2
barop 13.01.2017 22:57 # 0
guest 13.01.2017 23:41 # 0
barop 13.01.2017 23:50 # 0
Просто в ЯП со стат типизацией никто не стал бы принимать ключ как String с hex-encoded.
guest 14.01.2017 00:00 # +1
barop 14.01.2017 00:05 # +3
А вот в жабе и .NET стопудово не так.
Кстати, во многих криптолибах есть фреймворк для криптографии, и там вообще отдельно работать с AES не нужно.
Ты говоришь примерно: ШифруйМеня(данные, ключ, провайдер=AES)
И пофиг там AES или 3DES
Dr_Stertor 14.01.2017 00:24 # −3
barop 14.01.2017 00:31 # +2
char * это указатель на чар. Например чтобы сделать строку или одномерный массив байт.
Dr_Stertor 14.01.2017 00:37 # +1
@Указатель на указатель
Так его ж два раза придётся разыменовывать?
Первым разыменованием получаем адрес второго указателя, а вторым разыменованием создаём ссылку на память. Так?
barop 14.01.2017 00:44 # 0
bormand 14.01.2017 09:04 # +1
defecate-plusplus 14.01.2017 12:39 # +3
bormand 14.01.2017 12:44 # −1
defecate-plusplus 14.01.2017 12:46 # +1
Просто хороший тон (и единственно правильно в некоторых случаях) память освобождать там же, где и выделял.
bormand 14.01.2017 12:48 # +4
> Так все винапи работает
Попросить функцию оценить, сколько ей надо памяти, выделить память, позвать функцию ещё раз, обломаться, потому что условия изменились, реаллокнуть память. Плавали, знаем. Тьфублядь.
defecate-plusplus 14.01.2017 12:54 # 0
bormand 14.01.2017 13:03 # 0
Некоторые либы позволяют. Но редко, да.
Твой способ, кстати, ещё рулит когда структура заранее известного и не плавающего размера - можно вообще кучу не лапать.
> На всё есть причины
+1. Оба способа имеют свои недостатки, достоинства и право на жизнь.
bormand 14.01.2017 12:50 # +2
Да, но описанный мной приём этому правилу не противоречит. И позволяет вернуть что-то посложнее и поинкапсулированнее, чем просто буфер (какую-нибудь древовидную структуру, к примеру).
roman-kashitsyn 14.01.2017 14:28 # +4
Мне кажется, приводить винапи как образец хорошего дизайна интерфейсов -- не самая удачная стратегия.
barop 16.01.2017 18:39 # 0
Когда я его удалять буду?
bormand 16.01.2017 18:40 # 0
То как ты вообще сможешь им пользоваться? Он же в любой момент может сдохнуть.
В таком случае тебе какие-нибудь AddRef и Release дадут.
barop 16.01.2017 18:49 # 0
Вот ты сам и ответил -- как)
попользовался -- сказал Release.
А он остался жив, пока его в соседнем треде через полтора часа не релизнут, и тогда он окончательно даст дуба.
Ref Counting, короче.
guest 13.01.2017 23:36 # 0
А какая разница?
barop 13.01.2017 23:43 # +2
Отсюда вытекают их особенности:
* Ключ обычно имеет фиксированную длину, жестко прописанную в алгоритме, и обычно она слишком большая чтобы человек вводил ее с клавиатуры. А пароль таких ограничений не имеет и напротив: должен быть доступен для ввода с клавиатуры.
* Ключ может состоять из любых байт, а пароль это человекочитаемый текст, и в большинстве раскладок он не будет использовать, скажем, байт 0x1.
* Пароль имеет смысл брудфорсить, а ключ нет.
зы: полагаю что пароль можно превратить в некоторое подобие ключа, если сложить его со случайным числом и взять от этого хеш.
guest 13.01.2017 23:50 # 0
barop 13.01.2017 23:54 # +2
Возможно есть такая библиотека. Но AES не имеет понятия "пароль", и потому ожидает ключ.
1024-- 14.01.2017 02:30 # −1
Придираст!
> полагаю что пароль можно превратить в некоторое подобие ключа, если сложить его со случайным числом и взять от этого хеш.
Кстати, что обычно используют для выжимки пароля в ключ?
barop 14.01.2017 05:04 # +2
Случайное число все равно нужно.
Люди не смогу создать пароль длиннее чем 10 символов, и ни одна кодировка не даст тебе использовать все 255 символов для букв, а значит пароль у тебя даже не 10 байт, а меньше.
В ключ у AES, например, 192 байта. Это значит что десяти байт явно мало.
bormand 14.01.2017 08:57 # +3
PBKDF2, bcrypt, scrypt и т.п. Пыхомакаки - одну итерацию первого попавшегося хеша.
bormand 14.01.2017 09:38 # +1
bormand 14.01.2017 10:36 # +1
guestinho 14.01.2017 13:33 # +1
bormand 14.01.2017 13:47 # +1
З.Ы. Если как в PKCS #5 каждый раз делать новую соль - всё норм, ключ уже не long-term.
guestinho 15.01.2017 19:28 # +2
Если у разных юзеров пароли совпадут? Или о чем речь?
bormand 15.01.2017 19:56 # +1
Если ты юзаешь PBKDF(salt, password) напрямую как ключ (не меняя соль на каждое сообщение), то ты, по сути, юзаешь один ключ для всех данных. Такая схема очень чувствительна к выбору IV, особенно если шифр потоковый (аля AES в режиме CTR). Повторился IV - одинаковая пара (ключ, IV) - кровь-кишки (можно узнать инфу о плейнтексте не зная ключа).
Ещё есть ограничения на объём и количество сообщений, которые допустимо шифровать одним ключом. Ты не сможешь этот объём контролировать при такой схеме.
Поэтому проще сгенерить/породить новый ключ и не лезть на поле с граблями (хоть и теоретическими).
guestinho 15.01.2017 20:02 # 0
bormand 15.01.2017 20:04 # +1
1024-- 15.01.2017 19:08 # +1
bormand 15.01.2017 19:14 # 0
З.Ы. Надо ещё аутентификацию добавить, чтобы знать, что никто не помял сообщение по дороге. Ибо шифрование не спасает от изменения данных.
1024-- 15.01.2017 19:23 # 0
Добавить к данным перед шифрованием их дайджест?
bormand 15.01.2017 19:30 # 0
Нет. Это плохой, дырявый способ.
Много холиваров на эту тему было... Погугли на тему hash-than-encrypt, encrypt-than-mac и т.п.
guestinho 13.01.2017 23:42 # 0
guest 14.01.2017 00:02 # +6
bormand 14.01.2017 08:50 # +6
Dr_Stertor 13.01.2017 23:48 # +1
:-/
barop 13.01.2017 23:49 # 0
Dr_Stertor 14.01.2017 00:29 # 0
Ещё можно прибегнуть к Indy, там наверняка есть.
barop 14.01.2017 05:09 # +1
Dr_Stertor 14.01.2017 13:23 # +1
@А у вас же там доступ к Win32Api нормальный, значит можно Crypto API
Далеко пойдёшь.
bormand 14.01.2017 14:38 # 0
Dr_Stertor 14.01.2017 14:53 # +6
guestinho 14.01.2017 15:50 # 0
Dr_Stertor 14.01.2017 16:00 # 0
huge_cock 14.01.2017 16:34 # 0
guest 14.01.2017 18:06 # 0
1024-- 15.01.2017 18:49 # 0
> психиатр
В параллельной вселенной у психиатра раздвоение личности, а клиент здоров.
huge_cock 15.01.2017 18:52 # −1
bakagaijin 16.01.2017 17:48 # 0
bormand 15.01.2017 08:29 # 0
guest 14.01.2017 00:45 # +4
P.S я не рубист
Asen 14.01.2017 00:47 # −1
Fike 14.01.2017 05:22 # +1
bormand 14.01.2017 09:35 # +2
Fike 14.01.2017 23:38 # 0
bormand 14.01.2017 23:56 # 0
Fike 15.01.2017 00:31 # 0
barop 15.01.2017 00:44 # 0
Fike 15.01.2017 00:51 # 0
huesto 15.01.2017 01:06 # 0
bormand 15.01.2017 06:41 # +3
gost 14.01.2017 12:29 # 0
bormand 15.01.2017 07:18 # +2
bormand 15.01.2017 07:47 # +1
Ну да, чтобы всякие пробелы и т.п. убрать. Но посчитать то символы после этого можно было? :)
gost 15.01.2017 13:11 # 0
bormand 15.01.2017 13:14 # +2
З.Ы. Т.е. пробелы не в самом ключе, пробелы в одном из его текстовых представлений.
bormand 15.01.2017 08:00 # 0
bormand 15.01.2017 08:18 # +1
bormand 15.01.2017 08:18 # +2
kipar 14.01.2017 23:49 # 0
huesto 15.01.2017 00:07 # +6
Жиза. На собеседовании компьютерсайнс и паттерны проектирования, а на работе костыли и бойлерплейт на пхп.
Fike 15.01.2017 00:30 # +2
j123123 15.01.2017 15:54 # +2
Вот еще про side-channel атаки https://www.youtube.com/watch?v=fJCSYL9jc7Y
huesto 15.01.2017 16:19 # +1
bormand 15.01.2017 17:04 # +1
+1. Кого ебут эти side channel'ы, когда даже шифр цезаря с одним ключём на всех железках приносит профит:
http://cybergibbons.com/security-2/csl-dualcom-cs2300-signalling-unit-vulnerabilities/
dxd 15.01.2017 17:35 # +2
huesto 15.01.2017 17:43 # +3
Unnumbered 16.01.2017 12:27 # 0
huesto 16.01.2017 13:25 # +1
j123123 16.01.2017 14:03 # +1
Будешь это рассказывать своим клиентам, когда кулхацкеры похакают твой сайт (если он у тебя конечно есть) с ценной инфой из-за кривой самопальной криптографии
barop 16.01.2017 15:09 # +3
CHayT 16.01.2017 16:36 # +4
Какой же хипстер SQL использует? MongoDB, горизонтальное масштабирование, вот это всё.
roman-kashitsyn 16.01.2017 16:37 # +4
barop 16.01.2017 17:28 # 0
bormand 15.01.2017 20:05 # 0
Или padding oracle.
barop 16.01.2017 14:13 # +1
очень актуально когда твой сайт хостица на дижитал океане
bormand 16.01.2017 17:48 # 0
Угу, там актуальней side channel через обращение к кешу :)
barop 16.01.2017 18:02 # +2