PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Программирование на PureBasic » Unique Password - уникальный пароль


Unique Password - уникальный пароль

Сообщений 1 страница 19 из 19

1

Unique Password

Скачать: yandex upload.ee

https://i.imgur.com/3DrCdYH.png

Подробнее в ReadMe.txt. Программа генерирует уникальный пароль на основе домена и ключевой фразы, что позволяет получить пароль имея программу. Не требуется хранить базу паролей, таскать её на флешке, так как возможность доступа к паролю обусловлена наличием доступа к интернету, скачать программу и получить пароль.

Отредактировано AZJIO (04.07.2021 10:48:19)

0

2

AZJIO написал(а):

так как возможность доступа к паролю обусловлена наличием доступа к интернету

Насколько это безопасно? Никто случайно не сможет узнать пароль?

0

3

Пётр написал(а):

Насколько это безопасно? Никто случайно не сможет узнать пароль?

Интернет нужен только чтобы скачать программу. Например человек поехал в гости или в командировку по работе не рассчитывая там использовать компьютер, и по какой то причине есть время и компьютер и доступ в интернет, можно скачать программу и получить свои пароли. Пароли нигде не хранятся, они генерируются на основе ключевой фразы с доменом, то есть с помощью сложного алгоритма один и тот же домен с ключевой фразой возвращает одно и тоже число выраженное в виде букв и чисел. Чтобы получить пароль надо знать ключевую фразу, но её знает только сам пользователь, у которого она в голове, например в виде стиха, имени кота или ещё чего нибудь. Пользователь вводит ключевую фразу с доменом и получает пароль.

0

4

Обновил, теперь скомпилировано в Windows тоже.
Но меня удивляет что в PureBasic функция кодирования AESEncoder требует длину данных не менее 16 байт, а в AutoIt3 в _Crypt_EncryptData этого нет. Сначала я подумал что там ключ-пароль преобразуется в хеш-сумму, так как в AESEncoder параметр *Key тоже требует 16, 24 и 32 бита данных, но когда это указывается для кодируемых данных, тут я уже запутался.

0

5

AZJIO написал(а):

AESEncoder требует длину данных не менее 16 байт

AES (англ. Advanced Encryption Standard; также Rijndael, [rɛindaːl] — рейндал) — симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит)

https://ru.wikipedia.org/wiki/AES_(стандарт_шифрования)
128 бит это 16 байт. Вероятно дело в этом.

0

6

Пётр
кодируемые данные должны быть не менее 16 байт, то есть одну букву я не могу закодировать, там так и написано, надо добавить. Это кроме того что ключ должен быть 16 байт.

0

7

AZJIO написал(а):

Это кроме того что ключ должен быть 16 байт.

Ключ 128/192/256 бит или 16 / 24 / 32 байт.

0

8

А для чего такая сложная система бессмысленного шифрования? Для чего библиотека BigInt, если в Пурике не менее 5 способов сделать цифровой отпечаток ключа.
Ваша идея конфиденциальности основана на секретной фразе, которую знает только Юзер.
Нужно эту фразу тупо сопоставить с любой однозначной цифро-буквенной смесью. Ни чего кодировать не надо. Нужен просто хеш + соль.
Ваша программа не обеспечивает секретность, т.к. видно как получившийся пароль, так и вводимую фразу - шпионы, снимающие окно компьютера не дремлют и это не только скрины.
Я кроме шуток, я служил более 20 лет назад и уже тогда у нас в безопасности были такие автомобили, которые стояли за забором части и могли считывать с экрана монитора информацию.
безопасники искали незащищённую секретную информацию которую нельзя обрабатывать на компе. Правда мониторы были Электронно лучевые и излучали всё, что только можно излучать. :)

Аналог вашей программы, на 10 строк:

Код:
UseCRC32Fingerprint()
KeyWord$ =InputRequester("Ключевая фраза + домен","Введите ключевую фразу","",#PB_InputRequester_Password)
Pass$ = "":Leng.b = 12; длина пароля
For i = 1 To 5; Система скрытия пароля
  Pass$ + StringFingerprint(KeyWord$, #PB_Cipher_CRC32)
KeyWord$ = Pass$  
Next
Pass$ = Right(Pass$,Leng)
SetClipboardText(Pass$)
MessageRequester("Ваш пароль в буфере обмена!","Пароль будет удалён из буфера после закрытия этого сообщения!!!",#PB_MessageRequester_Info)
SetClipboardText(" ")
 

0

9

ВиниПур
Похоже мне придётся пересказывать все что я уже говорил на линукс-форуме. Хеш сумма имеет маленький набор 0123456789abcdef, в то время как мой вариант может использовать все буквы алфавита, чередовать строчные/прописные и при желании использовать прочие символы, которых ещё три десятка наберётся с клавиатуры. При желании также можно использовать и русские буквы, ещё 33.
Есть база паролей и их хеш-сумм, есть вероятность получения пароля поиском хеш-суммы по базе.

Для чего библиотека BigInt

BigInt нужна для создания системы счисления, без ограничения на размер числа. Число может оказаться таким, что четверное слово его не умещает.

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

потому что надо дальше делать, мой вариант этой проги на AutoIt3 имеет скрытие вводимых данных и там ничего сложного нет, просто добавить константу #PB_String_Password для отображения звёздочек вместо пароля, точнее я делал 2 поля ввода и установкой галочки "скрыть пароль" просто скрывал один гаджет и показывал другой копируя содержимое. У меня сейчас проблема которую хотелось бы решить, параметр *Input должен содержать данные не менее 16 байт исходя из параметра Size, я не могу добиться совместимости работы AES из AutoIt3 и PureBasic, чтобы обе программы были взаимозаменяемы, чтобы  тот кто использовал ту программу перейдя на линукс смог бы использовать эту программу.

0

10

AZJIO написал(а):

чтобы обе программы были взаимозаменяемы

Ну тогда понятно, что упрощать код смысла нет, если нужна совместимость с уже работающей программой.

AZJIO написал(а):

я не могу добиться совместимости работы AES из AutoIt3 и PureBasic

Принципы работы алгоритма AES обязаны быть идентичными. Раз есть такое требование, что  закодировать что-то меньшее 16 байт(вернее меньше размера ключа), к данным должно быть добавлено дополнение перед кодированием, то это есть и у AutoIt3. Наверно где то в глубине подключаемой библиотеки в AutoIt3 автоматически данные дополняются до нужного размера. Нужно только подсмотреть какими, если нет возможности расковырять саму библиотеку, то пробовать сравнить одинаковые строки, напишите небольшую программу на Пурике, где данные 15 байт всегда одинаковые, а 16-й байт подставляйте в цикле от 0 до 255. Как результат шифрования сравняется  с тем, что выдает AutoIt3 автоматически, без подстановки 16-го байта, то значит он и есть.

0

11

ВиниПур

без подстановки 16-го байта

нет, в автоите одну букву ввёл и получил шифрование, то есть надо 15 байт дописывать. Во вторых я конечно же посмотрел библиотеку шифрования и там идёт вызов из Advapi32.dll, создание Key 16/24/32 используются CryptCreateHash CryptHashData CryptDeriveKey, а для кодирования создаётся структура из данных и передаётся в вызов функции CryptEncrypt. Как там винда это всё делает внутри я уже не знаю, но там нет никаких дополнительных байтов, которые бы доводили данные до нужной длины.

Обновил
Добавил галку скрытия входных/выходных данных, то есть с экрана никто читать не будет.

0

12

AZJIO написал(а):

нет, в автоите одну букву ввёл и получил шифрование, то есть надо 15 байт дописывать.

А если ввёл 16 байт и точно такие же 16 байт в Пуре то результат совпадает или нет?
Если в принципе не совпадает, то что там наколхозили трудно сказать.
Если совпадает, то проверяем на совпадение 15 байт автоит и эти же 15 байт + $00 на Пурике.
Не совпало, то на Пурике изменяем на 15 байт + $01 и так до $FF пока не совпадет.

0

13

ВиниПур
да, можно потестить заполнение, но ещё важно, что пароль Key тоже 16/24/32 байт, а в автоит хоть 1 байт, то есть 1 символ ввожу, и тут я думаю, что автоит может использовать хеш-сумму пароля и поэтому не иметь ограничения 16/24/32, то есть надо ещё комбинировать с SHA1-3, CRC, MD5. И кроме того меня смущает, что StringFingerprint использует строку для получения её хеш-суммы, а что если это может быть указатель на бинарные данные определённой длинны, ведь AESEncoder возвращает данные в указатель, а значит скорее всего они бинарные и StringFingerprint возьмёт только часть данных до первого Null.

Ещё обновил, добавил поддержку RU/EN  ну или свой язык прописать в исходнике.

0

14

Кстати, Base64Encoder неплохо работает для 35 символьного пароля. Всё лучше чем колхозить замены с регулярными выражениями, числами и UCase

Код:
UseCRC32Fingerprint()
KeyWord$ =InputRequester("Ключевая фраза + домен","Введите ключевую фразу","",#PB_InputRequester_Password)
Pass$ = "":Leng.b = 13; длина пароля
For i = 1 To 5; Система скрытия пароля, MD5, SHA, что угодно
  Pass$ + StringFingerprint(KeyWord$, #PB_Cipher_CRC32)
KeyWord$ = Pass$  
Next
Debug KeyWord$ ; готовый хеш 
*key = UTF8(KeyWord$)
 Pass$ = Left(Base64Encoder(*key, MemorySize(*key)),Leng); готовый пароль из 32 символов
Debug Pass$

0

15

ВиниПур
Base64Encoder позволяет восстановить левую часть хеш-суммы, то есть судя по алгоритму мы практически получим хеш-сумму. Base64Encoder просто кодирует бинарные данные в текст, чтобы можно было использовать бинарные данные в текстовом файле, то есть запутывания нет совершенно. Части результата кодирования могут восстановить части данных. Вот мы и получаем хеш.
У меня сложнее, систему счисления можно поменять как угодно и без неё невозможно восстановить, и она создаёт такие данные из которых по части не возможно что-то получить от слова совсем. Возможен только переписывание исходника на взлом, изучив его работу и переписав код, чтобы наименьшее время затратить на выполнение подбора, да ещё задействовать большие вычислительные мощности, но это при условии, что  пароль короткий, и что пользователь использовал настройки по умолчанию. Стоит ему изменить систему счисления, и вычислить пароль методом подбора не возможно, так как надо перепробовать все комбинации систем счисления, и если в системе счисления 36 символов, то это тоже, что получить все хеш-суммы для 36-значного пароля. Вроде как база хеш-сумм имеется для 7-значного пароля.

Кстати ваш вариант подойдёт для SHA3+Base64Encoder, по крайней мере будет восстановлено часть хеш-суммы, ну и можно 2-кратное получение хеш-суммы. Разве что будет отсутствовать возможность добавлять спецсимволы.

Отредактировано AZJIO (04.07.2021 12:01:49)

0

16

AZJIO написал(а):

Base64Encoder позволяет восстановить левую часть хеш-суммы

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

Главный секрет у вас это фраза + соль (хорошая фраза + соль как раз и есть средство от базы хешей). Но её тоже не надо шифровать, она хранится в голове.

0

17

ВиниПур
где у Base64Encoder пароль? Есть хеш-сумма и Base64Encoder, здесь пароль только ключевая фраза автора, которая превращается в набор чисел и букв.

у вас бессмысленное шифрование. Бессмысленно, т.к. пароль это и есть секретное слово

суть не возможности обратной расшифровки, а если я буду в программе делать свой пароль, то взломщик сможет расшифровать пароль. Мне то этого не нужно, поэтому это сделано правильно. Цель отсутствие обратного преобразования и она достигнута.

Отредактировано AZJIO (04.07.2021 17:15:30)

0

18

AZJIO написал(а):

то взломщик сможет расшифровать пароль

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

AZJIO написал(а):

суть не возможности обратной расшифровки

Вычисление ХЕШ функции это необратимая операция. Невозможно восстановить начальную фразу по её ХЕШ функции.
Только тупой перебор всех возможных комбинаций.

AZJIO написал(а):

где у Base64Encoder пароль?

Для Base64 не нужен пароль, в моём случае Base64 нужно для генерации пароля из ХЕШа, не для шифрования, а как выше сказал, из ХЕШа невозможно восстановить исходную фразу, потому шифрование бессмысленно.
Пароль вы делаете для себя, потому ещё раз спрошу, кто будет его "расшифровывать" и для чего? Вы сами себе не доверяете?

0

19

ВиниПур

Для Base64 не нужен пароль,

я об этом знаю, поэтому и спросил, почему в вашем сообщении упоминается пароль.

Свойства хеша и кодирование я знаю достаточно, мы уже друг-другу объясняем элементарные вещи, у меня с использованием хеша написаны несколько программ, переименователь файлов, прога проверки файлов автозагрузки на изменение, прога поиска дубликатов,, вышеуказанная генератор паролей. В том числе я писал примеры с кодированием файлов и в том числе с открытием дескриптора для кодирования больших файлов блоками.
Пароль нужен не для доверия себе, он нужен, чтобы закодировать, либо 2-3 раза получить хеш-сумму. Я уже подумываю сделать в проге 2-3 алгоритма генерации пароля в том числе с настройками количества хеша и тип, а в конце base64, в том числе хеш+система счисления, пользователь сам выберет, что ему интересно.

Обновил
Сделал автоматическое вычисление пароля при вводе данных.
Добавил Base64Encoder, так как StringFingerprint не работает с бинарными данными.
Мелкие поправки, убрал изменение размера окна, восстановил копирование, подправил иконки.

Отредактировано AZJIO (05.07.2021 09:59:00)

0


Вы здесь » PureBasic - форум » Программирование на PureBasic » Unique Password - уникальный пароль