Сейчас на форуме: _MBK_, asfa, Rio (+5 невидимых)

 eXeL@B —› Вопросы новичков —› алгоритм ключа
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 апреля 2009 20:50 · Поправил: Mavlyudov
· Личное сообщение · #1

Вот, пытаюсь понять, как зашифрован пароль.
Есть сам пароль и есть он же в зашифрованном виде(в hex).
Вот несколько примеров:

abcdefghijklmnopqrstuvw
17 4C F3-1F 46 44 29-49 F4 44 BE-20 7D 35 10 99 0F FE 59-59 3E D8 AE-55

ABCDEFGHIJKLMNOPQRSTUVW
17 6C D3-3F 66 64 09-69 D4 64 9E-00 5D 15 30 B9 2F DE 79-79 1E F8 8E-75

0123456789
0A 1D A0-4E 11 15 7A-18 AB 15 ED

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



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:20
· Личное сообщение · #2

Пффф. Обычный xor. Чем отличаются символы - малые латинские литеры и большие знаешь? Ну так вот - первой тетрадой. Разницу между шифром для abcdefghijklmnopqrstuvw и ABCDEFGHIJKLMNOPQRSTUVW видишь? Первая тетрада.

Вот темплейт для ксоринга

2D 91 7C ...

P.S. RTFM




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 26 апреля 2009 21:21
· Личное сообщение · #3

Mavlyudov
было бы гораздо проще думать и размышлять если бы видели программу которая шифрует/дешефрует подобные пароли. Или в конце концов было бы не плохо посмотреть как ведут себя повторяющиеся символы в шифрованом пароле.

-----
Computer Security Laboratory




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 26 апреля 2009 21:23 · Поправил: arnix
· Личное сообщение · #4

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

a
aa
aaa
aaaa
ab
abb
aabb
ccc
ddd

added:
опоздал

progopis пишет:
Вы чо, прикалываетесь?


подумал что прежде чем посмотреть дождусь хороших примеров



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:24
· Личное сообщение · #5

arnix, [HEX]
Вы чо, прикалываетесь?




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 апреля 2009 21:26 · Поправил: Mavlyudov
· Личное сообщение · #6

[HEX]
Программа называется MathCad. Там можно установить область с паролем и туда вписать формулы,
которые никто не должен видеть.

Вот пример для повторяющихся символов:
dddd
04 49 F5-18 46

aabb
04 4C F0-1E 40

ab
02 4C F3

abb
03 4C F3-1E



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:29
· Личное сообщение · #7

Ну так вот, берёшь свой "dddd"

И шифруешь:

'd' xor 0x2D = 49
'd' xor 0x91 = F5
'd' xor 0x7C = 18
'd' xor 0x22 = 46
...



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:31
· Личное сообщение · #8

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




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 апреля 2009 21:32 · Поправил: Mavlyudov
· Личное сообщение · #9

progopis
Там длина ввода ограничена: около 30 символов.
Примеры, кстати, привел выше.
Кстати, откуда взялось это 2D 91 7C ...



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:33
· Личное сообщение · #10

Mavlyudov
А сразу не мог сказать? Давай шифруй 30-символьный пароль и результат сюда.



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 26 апреля 2009 21:37 · Поправил: arnix
· Личное сообщение · #11

Mavlyudov пишет:
Кстати, откуда взялось это 2D 91 7C ...



Твой пример
abcdefghijklmnopqrstuvw
17 4C F3-1F 46 44 29-49 F4 44 BE-20 7D 35 10 99 0F FE 59-59 3E D8 AE-55

'а' соттветствует 4C
'b' соттветствует F3
..
..


'a' - это ascii 61
'b' - это ascii 62
..
..

делаем 4C xor 61 получаем 2D
делаем F3 xor 62 получаем 91
..
..




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 апреля 2009 21:40 · Поправил: Mavlyudov
· Личное сообщение · #12

progopis

[поправил]

0123456789abcdefghijklmnopqrstu
1F 1D A0-4E 11 15 7A-18 AB 15 ED-2A 73 3B 1A 93 19 E8 43-43 20 C6 B4-4F 65 3D 3E-DA 6D 76 81 31



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:42
· Личное сообщение · #13

Mavlyudov пишет:
Кстати, откуда взялось это 2D 91 7C ...


abcdefghijklmnopqrstuvw
17 4C F3-1F 46 44 29-49 F4 44 BE-20 7D 35 10 99 0F FE 59-59 3E D8 AE-55

17 - ты сам сказал, это длина, отбрасываем её

дальше побайтовый xor :

'a' xor 0x4C = 0x2D
'b' xor 0xF3 = 0x91
'c' xor 0x1F = 0x7C
'd' xor 0x46 = 0x22
'e' xor 0x44 = 0x21
'f' xor 0x29 = 0x4F
'g' xor 0x49 = 0x2E
'h' xor 0xF4 = 0x9C

Дальше сам сможешь?




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 апреля 2009 21:45
· Личное сообщение · #14

progopis
хм..не знаю. А что делать, если известен только зашифрованный пароль?



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:46
· Личное сообщение · #15

А теперь немного уличной магии:

Вот пароль 'progopis'
Вот его хэш: 08 3С E3 13 45 4E 3F 47 EF

arnix
Поздняк брат, ты уже проштрафился. Лучше помоги мне баги пофиксить. Я сейчас занят аддоном для лички. Может ты пока оффтопом займёшься?



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 21:48
· Личное сообщение · #16

Mavlyudov
Ну это уже не мыслимо... Может мне тему в вопросы новичков перенести если ты не знаешь что такое "сложение по модулю 2" он же xor?



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 22:13
· Личное сообщение · #17

Итак, мы имеем следующее:

0123456789abcdefghijklmnopqrstu
1F 1D A0-4E 11 15 7A-18 AB 15 ED-2A 73 3B 1A 93 19 E8 43-43 20 C6 B4-4F 65 3D 3E-DA 6D 76 81 31

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

Ключ мы получаем побайтово делая операцию XOR. То есть:
отсекаем байт длины, дальше побайтово ставим пароль и его хэш и ксорим:

0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u
XOR
1D A0 4E 11 15 7A 18 AB 15 ED 2A 73 3B 1A 93 19 E8 43 43 20 C6 B4 4F 65 3D 3E DA 6D 76 81 31
=
2D 91 7C 22 21 4F 2E 9C .......... (дальше сами)

Зная ключ, пробуем расшифровать хэш "08 3С E3 13 45 4E 3F 47 EF "

Длина 8, отлично, берём первые 8 байт ключа (я их уже нашёл). Процесс расшифровки:

3С E3 13 45 4E 3F 47 EF
XOR
2D 91 7C 22 21 4F 2E 9C
=
p r o g o p i s

Мини-справка:
"тетрада" - блок из 4 бит, шестнадцатеричная цифра ( 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
"сложение по модулю 2" - он же XOR, операция, при которой происходит побитовое сложение операндов, результат округляется по модулю 2, то есть 1 xor 0=1, 0 xor 1 = 1, 1 xor 1=0, 0 xor 0 = 0
Верно следующее (докажите):
Если a xor b =c, то a xor c =b и b xor c = a, поэтому если у нас есть некий пароль pass и хэш hash полученный операцией pass xor key = hash, мы можем определить этот ключ key = pass xor hash



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 22:16
· Личное сообщение · #18

Тема перенесена в вопросы новичков. А если у автора больше нет вопросов, то и закрыть можно.




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 апреля 2009 22:33
· Личное сообщение · #19

progopis
Вообще-то есть.
Я тут набросал на паскале код.
Как можно его оптимизировать, чтобы по зашифрованному паролю получать настоящий.
Что-то я пока не понимаю.

Code:
  1. var ch:char;
  2. a1,a2,a3,a4,a5,a6,a7,a8,a9:char;
  3. begin
  4. a1:=char($60 xor $2D);
  5. a2:=char($F0 xor $91);
  6. a3:=char($0A xor $7C);
  7. a4:=char($4E xor $22);
  8. a5:=char($58 xor $21);
  9. a6:=char($3A xor $4F);
  10. a7:=char($4A xor $2E);
  11. a8:=char($F3 xor $9C);
  12. a9:=char($5B xor $2D);
  13. writeln(a1,a2,a3,a4,a5,a6,a7,a8,a9);
  14. readln;
  15. end.




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 26 апреля 2009 23:00
· Личное сообщение · #20

Я это себе вот так представляю:

Code:
  1. const key_len = 31 ;
  2. type arr=array[0..key_len] of integer;
  3. var pass,hash,key:arr ;
  4. var str:string ; i,len:integer;
  5. begin
  6.   key[0]:=$2D ;
  7.   { дописать остальные значения }
  8.   writeln('Type your hash: ') ;
  9.   readln(str) ;
  10.   {get_len, get_bytes - вот это надо реализовать }
  11.   for i:=0 to len do
  12.      begin
  13.        pass[i]:=hash[i] xor key[i] ;
  14.      end ;
  15.   for i:=0 to len do write(char(pass[i])) ;
  16.   readln;
  17. end.





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 27 апреля 2009 00:12
· Личное сообщение · #21

progopis
Спасибо за помощь!
Вот, я доделал.

Code:
  1. const key_len = 31 ;
  2. type arr=array[1..key_len] of integer;
  3. var pass,hash:arr ;
  4.     i,len:integer;
  5.     F:text;
  6. const key:arr=($2D,$91,$7C,$22,$21,$4F,$2E,$9C,$2D,..........,$126);
  7. begin
  8. Assign(F,'hash.txt');
  9. Reset(F);
  10. i:=0;
  11. while not eof(f) do
  12. begin
  13.  i:=i+1;
  14.  read(f,hash[i]);
  15. end;
  16. Close(F);
  17. len:=i;
  18. i:=0;
  19.  for i:=1 to len do
  20.   begin
  21.    pass[i]:=hash[i] xor key[i] ;
  22.    write(chr(pass[i])) ;
  23.   end ;
  24. readln;
  25. end.


Тему закрывать можно! Всем спасибо!


 eXeL@B —› Вопросы новичков —› алгоритм ключа
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати