Ищется реализация симметричного шифрования

std
Offline
Зарегистрирован: 05.01.2012

Навеяно статьёй про SHODAN (www.shodanhq.com)

Сервис предназначен для поиска устройств по некоторым критериям - отсутствию процедуры авторизации, к примеру. Так что просто так поднять сервер управления люстрой и расшарить DDNS'ом на весь инет для кулхацкеров - не айс. Заголовок Authorization в запросе тоже не айс - как я понимаю, не имея слоя HTTPS это будет выглядеть так же, как http://myserwer.com?pass=supermegasecurepasswordhere. А HTTPS так и так не будет, т. к. RSA и вообще неподъёмная асимметричная математика. Неподъемная для 328, об ARM'ах речи в этой теме, думаю, не будет.

Итак, преамбула, IMHO, сформулирована вполне себе ясно, так что:

- имеем восьмибитку, которая весьма слаба

- имеем желание не передавать информацию в открытом виде

- имеем небезопасный канал связи (инет).

Вывод о симметричном алгоритме очевиден. Собственно, и ищется либа/функция, реализующая его. Не особенно важно что именно - IDEA, BlowFish или что-то ещё, лишь бы стойкое было. Тупо XOR'ить тоже как-то.. мм.. не знаю как назвать.

vdk
Offline
Зарегистрирован: 14.04.2013

Так и так

Ну, или как-то иначе

std
Offline
Зарегистрирован: 05.01.2012

Десу почти 40 лет, ну и в 1998 его благополучно поломали. Хотелось бы нечто поновее.

all, допустимо ли использовать для таких вещей TEA?

void encrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0, i;           /* set up */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i < 32; i++) {                       /* basic cycle start */
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}
 
void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;       /* set up */
    uint32_t delta=0x9e3779b9;                          /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];        /* cache key */
    for (i=0; i<32; i++) {                              /* basic cycle start */
        v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
        v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        sum -= delta;                                   
    }                                                   /* end cycle */
    v[0]=v0; v[1]=v1;
}