HeroBrine1st 88 Опубликовано: 6 июля, 2018 (изменено) Установка - pastebin get wmAj3hcP /bin/cryptednote.lua Библиотека - pastebin get uDnh4RLi /lib/crypt.lua Альтернативный вариант установки (выберите там CryptedNote, это мой установщик на все мои проги :) ) - pastebin run 1xudmTa7 Использование: cryptednote name [options] Опции: --rewrite; -w - перезапись файла --execute; -x - исполнение файла без записи на диск Пароль закрыт точками. Зашифрованные файлы хранятся в /usr/cryptednote (легко меняется в коде). Если файл редактируется, он находится в /usr/cryptednote/temp.crtnt (в нешифровнном виде). Код - https://pastebin.com/wmAj3hcP Изменено 4 января, 2019 пользователем HeroBrine1st 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zed 133 Опубликовано: 7 июля, 2018 (изменено) ... Вводим новый пароль, смотрим краткое описание и инструктаж безопасности (10 секунд на прочтение) ... Прикольно, но зачем ставить задержку 10 сек на прочтение того, что вывелось на экран. Просто сделать Event на нажатие.(и сообщение для продолжения нажмите любую клавишу). Ведь скорость чтения у каждого разная, кто-то быстрей, кто-то медленней. А так прочитал кликнул и дальше работает. Без всяких лишних задержек. Изменено 7 июля, 2018 пользователем Totoro не надо цитировать стартовый пост целиком 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 8 июля, 2018 @@HeroBrine1st, можешь пояснить назначение этого хитрого участка кода? print("Перезапись ключа в ОЗУ 35 раз") for i = 1, 35 do psk = string.random(psk:len()) end print("Удаление ключа из ОЗУ") psk = nilНасколько я знаю, достаточно последней строчки, если речь идёт об OpenComputers, а в контексте языков, приближенных к машинным, достаточно лишь один раз переписать находящийся в RAM ключ. Или есть иная информация? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 9 июля, 2018 (изменено) @@HeroBrine1st, можешь пояснить назначение этого хитрого участка кода? print("Перезапись ключа в ОЗУ 35 раз") for i = 1, 35 do psk = string.random(psk:len()) end print("Удаление ключа из ОЗУ") psk = nil ОЗУ компа на хост-мащине хранится в ее ПЗУ. Для полной перезаписи с удалением информации нужно 35 итераций. Если включена буферизация, это не поможет, но если отключена - вполне рабочая вещь. К слову, о мануале при первом запуске утилиты и продолжению по клику. Я сделал. Изменено 9 июля, 2018 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 9 июля, 2018 ОЗУ компа на хост-мащине хранится в ее ПЗУ. Для полной перезаписи с удалением информации нужно 35 итераций. Откуда инфа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 9 июля, 2018 Откуда инфа? Из какого-то канала Telegram. Подтвердить инфу не могу, увы( Лишним не будет - выполняется моментально. os.sleep чисто для наблюдения процесса поставил, иначе ввел пароль и сразу к файлу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 9 июля, 2018 Откуда инфа? из суеверных источников Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 9 июля, 2018 Из какого-то канала Telegram. Подтвердить инфу не могу, увы(Сложно подтвердить инфу, которая легко опровергается. Всякий источник информации может оказаться полезным, но не всякую информацию стоит принимать на веру. Исключение составляют только случаи, когда в данный момент проверка информации не представляется возможной, а источник уже имеет хорошую репутацию. Это как с теориями физики, о которых здесь на форуме даже как-то спорили: теории, конечно, не идеальные, но лучших в данный момент всё равно нет. Лишним не будет - выполняется моментально.При такой логике любую операцию можно повторять 35 раз. Ну, а что, моментально же выполняется. Но лишним таки будет. Наш форум читают неопытные программисты, которым этот код может показаться нормой. Это не норма, и вот, почему. Любая локальная переменная доступна исключитлельно в области своей видимости. Соответственно, локальная переменная psk доступна только в предалах блока do ... end, внутри которого она была объявлена, а по окончанию его работы занимаемаемая ею память становится доступной для освобождения сборщиком мусора. Но и на этом этапе содержимое переменной не будет удалено. Оно будет затёрто лишь при инициализации новых переменных, если они, конечно, будут созданы на этом участке памяти. Операция psk = nil тоже не удаляет строку, а лишь указывает, что теперь значение переменной пустое, а ранее занятая переменной память может быть освобождена сборщиком мусора. И даже psk = string.random(psk:len()) не перезаписывает пароль в ОЗУ, а лишь создаёт новую строку, и присваивает ссылку на неё переменной psk, а сама же строка остаётся в неизименном виде до тех пор, пока до неё не доберётся сборщик мусора. Но и он, как говорилось выше, переменную не очищает. Что мы имеем в итоге? 35 раз создаётся новая строка, а ссылка не неё присваивается переменной psk, каждый раз затирая предыдущую ссылку (не строку!). Потом ссылка (не строка!) очищается при выполнении psk = nil. А по окончании выполнения блока do ... end теряется доступ к самой переменной psk. Значение имеет только последнее действие: доступ к переменной потерян. Сам ключ и 35 экземпляров случайных строк продолжают висеть в памяти. Со временем сборщик мусора освободит память из-под этих переменных, а их значения так и останутся в памяти, пока на их месте не будут созданы и инициализированы новые переменные. Конечно, интенсивное создание случайных строк ускорит использование сборщика мусора и в конечном итоге даже перезапись того участка памяти, где когда-то был ключ. Но возникают два вопроса. Почему 35 итераций достаточно для гарантированного удаления ключа? И какая в этом польза, если доступ к ключу внутри Lua всё равно уже потерян, а другого доступа в OpenComputers нет и не предвидится? 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 10 июля, 2018 (изменено) по исследованию исходного кода ОС, gc вызывается при вызове computer.pullSignal, но я не специалист в скале потому могу ошибаться Изменено 10 июля, 2018 пользователем NEO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 10 июля, 2018 Я называю такой код - "вуду-программирование". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 10 июля, 2018 (изменено) И какая в этом польза, если доступ к ключу внутри Lua всё равно уже потерян, а другого доступа в OpenComputers нет и не предвидится? Я рассчитывал на то, что если админам понадобится ключ - они пойдут в кеш сервера и пойдут его искать там. Ну раз у луа такая логика, значит придется удалить этот участок кода.. P.s. и переменные можно вообще не обнулять получается? нет смысла? Почему 35 итераций достаточно для гарантированного удаления ключа? При выключенной буферизации все изменения переменных будут моментально записаны на диск сервера. Если это HHD, то 35 (уточняется) итераций как раз будет достаточно для полной перезаписи информации (как оказалось, не информация перезаписывается, а ссылка на нее). А если SSD, то Trim удалит остаточные данные. Изменено 10 июля, 2018 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 29 декабря, 2018 (изменено) Чутка обновил утилиту. Из изменений - заметки перенесены в/usr/cryptednote (легко меняется в коде, если надо все вернуть) и поддерживает огромные (реально огромные файлы вплоть до свободной ОЗУ) файлы. Но с последним проблемы, оно как-то не так записывает расшифрованный файл в /tmp/, обрезает его почему-то. Установка тем же методом. Про поддержку огромный файлов - они вызывали ошибку TLWY, пришлось делать цикл (спасибо за блочность алгоритма) и вставлять os.sleep(0). P.s. там в коде можно найти gpu.set вместо term.write - это мне было лень делать функцию переноса курсора на начало строки) UPD: еще флаг --execute сделал (или -x), расшифровывает файл и запускает его. Расшифрованный код никуда не записывается, он остается только в ОЗУ Изменено 29 декабря, 2018 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 904 Опубликовано: 29 декабря, 2018 @HeroBrine1st, /tmp/ - это монтированный путь виртуальной файловой системы tmpfs, жестко ограниченной по размеру в конфиге мода: # The size of the /tmp filesystem that each computer gets for free. If # set to a non-positive value the tmp file system will not be created. tmpSize=64 Записывай напрямую на загрузочный хард - и все будет шоколадно. А еще для предотвращения TLWY проще использовать computer.pullSignal(0), что гарантирует разовое прерывание, т.к. OS.sleep() иногда умудряется вызвать pullSignal дважды. А прога клевая, мяу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 29 декабря, 2018 Еще раз обновил утилиту) 1. Как говорил ECS, теперь временный файлик находится на диске. По умолчанию - /usr/cryptednote/temp.crtnt, + использую computer.pullSignal 2. Заменил gpu.set на функцию write (стащил из другой своей программы ), которая стирает и пишет на последней записанной строке И предыдущие изменения: 3. Поддерживает большие файлы 4. Появился флаг --execute (-x), который расшифровывает и вызывает файл без его записи на диск. 5. Файлы программы перенесены в /usr/cryptednote и это можно изменить в коде. Из-за записи на загрузочный диск упала безопасность - в случае принудительного выключения устройства или (хуже) вытаскивания диска расшифованный файл так и останется лежать. Так что используем планшеты и желательно в безопасных местах) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 197 Опубликовано: 13 января, 2021 А можно сделать фичу, чтобы оценивало необходимое место на диске и если влезает, то записывало расшифрованный файл в tmp? И где-нить в уголке показывало иконкой, куда был сохранен файл, чтобы понимать, насколько безопасно текущее использование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах