README.md

rsass

Утилита для шифрования файлов

CodeFactor


Установка

Чтобы установить данную утилиту на ОС Linux, необходимо скачать скрипт установки и запустить его или клонировать репозиторий локально и собрать из исходников: wget -vS https://github.com/SashaShrek/rsass/blob/master/Install.sh, для Windows необходимо скачать архив.

Использование

Данная утилита является консольной. То есть, чтобы её использовать, необходимо открыть терминал (в Линукс) или cmd (в Windows) и перейти в директорию, где лежит бинарник программы. Утилита имеет 3 флага, комбинируя которые можно создать ключи, зашифровать/расшифровать любые файлы.

  • Создать ключи: rsass -ak=23,73 - два простых числа; ak - add keys. После данной команды в директории, где лежит бинарник, будут созданы файлы с открытым и закрытым ключами. Советую не удалять их, потому что утилита будет брать ключи именно из этих файлов.
  • Зашифровать файл: rsass -crypto=/path/to/file - данная команда создаст файл по названию идентичный изначальному, только в конце будет .cry.
  • Расшифровать файл: rsass -uncry=/path/to/file.cry.

Возможные проблемы

  • При шифровании выбирай адекватных размеров файл
  • Не рекомендуется шифровать бинарники

Математика

Для создания зашифрованного сообщения необходимо действовать по алгоритму: c = m^e mod n, где:

  • c - зашифрованное сообщение
  • m - первоначальное сообщение
  • e - открытая экспонента
  • n - произведение двух простых чисел a и b

Чтобы найти e, необходимо использовать неравенство: 1 < e < Fi(n), где Fi(n) - функция Леонардо Эйлера, Fi(n) = (a - 1) * (b - 1) | n = a * b. В коде это:

func getE(fi int) int {
	var index int
	count := fi
	for index = 2; index < count; index++ {
		if (index%1 == 0) && (fi%1 == 0) && (fi%index != 0) {
			break
		}
	}
	return index
}

Для создания закрытого ключа, необходимо использовать тождество: d * e = 1 (mod Fi(n)) => d = 1 (mod Fi(n)) / e => d = (1 + k * Fi(n)) / e, где k будем искать перебором с условием, что e != d, а (d * e) mod Fi(n) = 1, d - секретная экспонента. Код:

func getD(e int, fi int) int {
	var d int
	var k int

	for k = 2; k < fi; k++ {
		d = (1 + fi*k) / e
		if d != e && ((e*d)%fi == 1) {
			break
		}
	}
	return d
}

Чтобы расшифровать сообщение, необходимо использовать следующее равенство: m = c^d mod n.

Описание

Утилита для шифрования файлов

Конвейеры
0 успешных
0 с ошибкой