Знаеш ли какви промени в законите ти готвят? Готов ли си да се подчиняваш на господарите си?

Нашите законотворци (които изобщо не взимат пари за писане на закони) пак пишат промени в закон по много подозрителен начин. Промените са "скрити" в края на проект за закон, в заглавието на който се твърди, че ще се изменя ЗДДС. Обаче се оказва, че това не е съвсем така - променят се и други закони...

Опитват да вкарат промени, които само до преди месеци не успяха! Дали този път ще успеят да гласуват в интерес на тесен кръг лица?

Демокрацията работи само ако гражданите се интересуват какви закони смятат да се гласуват в Народното събрание. Също така, за да работи демокрацията, се налага и народните представители да са наясно с това, което гласуват.

Да спрем банковия лобизъм!

Допълнително разтягане на ключове

Разтягането на ключове (англ. key stretching) е добра допълнителна защита срещу отгатване на паролата (англ. brute force attack), но много от популярните програми не прилагат това правилно или изобщо нямат такава функция.

Идеята е, че ако се ползва бавно (изискващо процесорно време и памет) разтягане на ключове, това ще затрудни опитващите се да ви отгатнат паролата – за всеки опит да отгатнат паролата ви ще трябва да плащат за изчислителни ресурси.

Практически пример: стартирате скрипта slowkdf.py, пишете за парола "коректен кон батерия телбод", въвеждате сол (примерно "vhtLXCqhvOJif0TLhh2Wjn392t" или просто "сол"), задавате достатъчно голям брой итерации (примерно 40) и след няколко минути (или часове – зависи колко сте готови да платите за сигурността си) скриптът за разтягане на ключове извежда нещо такова:

s9FzZqyWRly8qoQ5UN2dd5mQVYYfNVChHWHLiVy1T8nXjFbdbQUwk/pDz6ou7WKO/6NVXuT3oq3E0GjcQAS1zw==

Този низ го ползвате като парола за шифриране на нещата, които не искате другите да виждат (например това може да е паролата, с която е защитен частния ви PGP ключ).

Тоест, трябва да помните паролата и къде сте записали солта и броя на итерациите. Трябва да съхранявате и копие от скрипта.

Установих, че GnuPG не предлага адекватно разтягане на ключове както при шифриране на файлове с парола, така и за защита на частния ключ с парола.

#!/usr/bin/python2

import scrypt
import binascii
import getpass
from hashlib import sha512

def SlowKDF(password, salt, i):
    digest = password
    for counter in range(i):
      print "Iteration %s from %s..." % (counter+1, i)
      digest = scrypt.hash(digest, salt, N = 1048576, r = 8, p = 1, buflen = 128)
    return digest

mypass = getpass.getpass("Passphrase: ")

if mypass != getpass.getpass("Repeat passphrase: "):
  print "ERROR: Passwords do not match."
  quit()

if mypass != getpass.getpass("Repeat passphrase (again): "):
  print "ERROR: Passphrases do not match."
  quit()

mysalt = raw_input("Salt: ")
mynumber = int(input("Number of iterations: "))

mydigest = SlowKDF(mypass, mysalt, mynumber)

print "\n == Version 1 =="

print "\n\nDigest in hex format:", binascii.b2a_hex(mydigest)

print "\n\nDigest in base64 format:", binascii.b2a_base64(mydigest)

print "\n == Version 2 =="

mydigest_v2 = sha512(mypass+mysalt+mydigest).digest()

print "\n\nVersion 2 digest in hex format:", binascii.b2a_hex(mydigest_v2)

print "\n\nVersion 2 digest in base64 format:", binascii.b2a_base64(mydigest_v2)

print "\n == Version 1+2 =="

mydigest_v1plus2=mydigest+mydigest_v2

print "\n\nVersion 1+2 digest in hex format:", binascii.b2a_hex(mydigest_v1plus2)

print "\n\nVersion 1+2 digest in base64 format:", binascii.b2a_base64(mydigest_v1plus2)

Преди да се ползва този скрипт трябва да се инсталира scrypt:

$ pip install --user scrypt

Преди да пуснете скрипта имайте предвид, че изисква да имате поне 1 GB (един гигабайт!) свободна оперативна памет. Ако нямате толкова системата може да блокира. Това не е бъг, нарочно се изисква токова много памет. Целта е да се откажат крадците на данни, които искат да минат тънко (със суперкомпютър с малко RAM).

Github: SlowKDF

Скриптът вади няколко версии за ключ като най-практичната е "Version 2 digest in base64 format".

Разликата между версия 1 и 2 е, че при втората съм добавил за всеки случай sha512 – изчислява се sha512(ключа+солта+версия_1). Версия 1+2 се подразбира от името какво е (плюсът значи конкатенация).

Ако ви притеснява това, че версия 2 е по-къса – просто ползвайте версия 1+2 (ако програмата, която ползвате ви позволява толкова дълги пароли; ако ли не – режете докато се събере в лимита и помнете/запишете колко сте отрязали).

Любителите на шапките с фолио вероятно ще предпочетат да ползват "Version 1+2 digest in base64 format", но тя работи само с GnuPG версия 1 (версия 2 има ограничение на броя символи на паролата!). Ако слагате шапка от фолио и на котката – значи вероятно ще ви хареса идеята да въвеждате и допълнителна парола (конкатенация на "Version 1+2 digest in base64 format" и допълнителна парола).

Ако се чудите защо слагат фолио и на котките: котката може да е видяла как въвеждате паролата и без шапка от фолио могат да я програмират безжично да се обади по телефона и да каже паролата на някого.

Бърз тест да проверите дали програмата за шифриране, която ползвате има адекватно разтягане на ключове: ако вади отговор "грешна парола" (при опит за дешифриране) за части от секундата – значи програмата е калпава. Ако ѝ трябва минута или повече – добра е.

А не може ли да се ползва scrypt от https://www.tarsnap.com/scrypt.html?

Да, знам за scrypt. Обаче тази програма ползва само алгоритъма scrypt, доколкото разбрах (моят скрипт, версия на digest-а 2, ползва допълнително sha512).

И не е удобна ако просто искаш да си разтеглиш ключа за защита на частния PGP ключ. И ако забравиш да зададеш достатъчно силни параметри за време и памет ще ползва несигурни настройки по подразбиране. И не ми харесва как като задам време 10 секунди програмата смята значително по-кратко.

Ако все пак предпочитате да я ползвате, задавайте свои собствени настройки като добавите достатъчно големи стойности на параметрите "-M" и "-t" (не ползвайте тези по подразбиране):

$ scrypt enc -M 1073741824 -t 256 разни-тайни-неща.txt шифрирани-тайни.scrypt

Ще забележите, че изисква доста по-малко от 256 секунди в действителност (поне на моя компютър е така).

Снимка: pixabay.com

Коментари

Популярни статии

За вредата от озонаторите и йонизаторите на въздух

Снимане на публични и обществени места - правни аспекти

Как да решим проблема с обувките лесно – просто си купете с няколко номера по-големи обувки и сложете един или повече слоя допълнителни стелки

Търся си приятелка

Редакция на PDF файлове със свободен софтуер

Проблемът с амплитудно модулираната светлина и ползването на широчинно-импулсна модулация за регулиране на яркостта на светлинни източници

Снимайте полицаите! (Особено когато вършат престъпления)

Блогът на Григор Гачев

Блогът на Майя Маркова

Блогът на Петър Стойков

Блогът на Begem0t

Блогът на Димитър Кръстев

Книголандия

Блогът на Александър Бизарски (Sparx)

Блог за книги

Блогът на chitanka.info

Блогът за икономика

Институт за пазарна икономика

Блог на Институт за радикален капитализъм "Атлас"

Пещерата на неандерталеца

Още блогове

Всички публикации в блога (цъкни тук за да се отвори архива)

Показване на още