Перейти к содержанию

Закодированная Передача Данных


Рекомендуемые сообщения

Здравствуйте! Помогите пожалуйста с реализацией алгоритма защищенного канала связи, задача и блок схема такая:

1. Приемник шлет передатчику сообщение, что он хочет начать процедуру авторизации (по сути абсолютно любое сообщение, например сигнатуру).

2. Передатчик генерирует случайную последовательность байт (например 8 байт, один блок шифрования) и предает эти данные приемнику (сами данные он сохраняет в памяти как «исходные»).

3. Приемник шифрует полученный блок данных и отправляет обратно, передатчику.

4. Передатчик расшифровывает полученные данные и сравнивает с «исходными». Если данные совпадают – авторизация прошла успешно.

Помогите пожалуйста,написать алгоритм шифрования или помогите пожалуйста с литературой,исходниками. Если кому не жалко. В программировании новичок и в криптографии тоже. Пыталась реализовать задумки по программному кейлогу,найденной информацией из интернета,также aes и des. Среда разработки coocox,микроконтроллер stm32f100rbt6,rfm22 радиомодуль,частота передачи 433МГЦ,тактовая частота 24МГц. Буду очень благодарна за помощь.

post-191470-0-66285700-1433235038_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

keeloq давно взломан

Зачем писать ерунду. Никто его не ломал. Ломали контроллеры, доставая из памяти ключи шифрования. Ломать агоритм нет смысла, он и так в открытом доступе.

Ссылка на комментарий
Поделиться на другие сайты

Что у Вас закрытый ключ делает на обоих сторонах ?

делать нужно так: инициатор передачи данных генерит два ключа - закрытый и открытый. приемнику шлет открытый . приемник генерит ключ шифрования - шифрует его открытым ключом (например при помощи RSA) и отправляет его передатчику. Передатчик расшифровывает ключ шифрования с помощью закрытого ключа и ключом шифрования шифрует отправляемое сообщение (например по DES). Таким образом ключи каждый раз разные и в программе нигде ключ никакой хранить не нужно. Этот метод не решает задачу аутентификации - в этом случае нужно применить ЭЦП - что потребует в кого то зашить закрытый ключ.

Ссылка на комментарий
Поделиться на другие сайты

Все автосигнализации на keeloq бесполезные и легко открываются - так проще?

Если нет защиты, то зачем кодировать? От ложного срабатывания? :)

Изменено пользователем strifonoff
Ссылка на комментарий
Поделиться на другие сайты

Для иллюстрации работы алгоритма к статье прикреплена простая реализация ГОСТ 28 147-89 (DES)

Приведенная реализация алгоритма шифрования состоит всего из трех функций.

void kboxinit(void) –данная функция «инициализирует» криптоядро. На самом деле, она выполняет некоторые предвычисления, которые позволяют в дальнейшем ускорить шифрование/дешифрование.

void gostcrypt(const uint32_t in[2], uint32_t out[2], const uint32_t key[8]) – шифрование, in – открытый текст, out – закрытый текст, key – ключ шифрования.

void gostdecrypt(uint32_t const in[2], uint32_t out[2], uint32_t const key[8]) – дешифрование, in – закрытый текст, out – открытый текст, key – ключ шифрования.

Лучше всего продемонстрировать работу на примере

uint32_t key[8] = {0x11111111, 0x22222222, 0x33333333, 0x44444444, 0x55555555, 0x66666666, 0x77777777, 0x88888888};

uint32_t plain[2] = {0xAAAAAAAA, 0xBBBBBBBB};

uint32_t cipher[2];

uint32_t result[2];

//Инициализация "крипторядра"

kboxinit();

//Шифруем plain ключом key, результат шифрования помешаем в cipher

gostcrypt(plain, cipher, key);

//Дешифруем cipher ключом key, результат шифрования помешаем в result

gostdecrypt(cipher, result, key);

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

if(memcmp(plain, result, sizeof(plain)) != 0) {

printf("encrypt/decrypt error\n");

} else {

printf("encrypt/decrypt success\n");

}

Вопрос задам по точнее,как записать общий ключ в микроконтроллеры? Какие библиотеки нужно подключить? Сделать отдельные файлы для подключения или в main можно все прописать?

Что у Вас закрытый ключ делает на обоих сторонах ?

делать нужно так: инициатор передачи данных генерит два ключа - закрытый и открытый. приемнику шлет открытый . приемник генерит ключ шифрования - шифрует его открытым ключом (например при помощи RSA) и отправляет его передатчику. Передатчик расшифровывает ключ шифрования с помощью закрытого ключа и ключом шифрования шифрует отправляемое сообщение (например по DES). Таким образом ключи каждый раз разные и в программе нигде ключ никакой хранить не нужно. Этот метод не решает задачу аутентификации - в этом случае нужно применить ЭЦП - что потребует в кого то зашить закрытый ключ.

Спасибо,что заметили ошибку,блок схему переделаю. Изменено пользователем V_IMA
Ссылка на комментарий
Поделиться на другие сайты

Программный кейлог,проблема с подключением библиотек,заменой в coocox

#include <stdio.h>

#include <stdint.h>

#include <stdlib.h>

#include <string.h>

#include <sys/select.h>

#include <errno.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <math.h>

#include "keeloq.c"

//set modulation depth here

float l_zero= 0.;

float l_one = 1.;

void delay_ms(int fd,unsigned int sr,unsigned int t )

{

unsigned long count = sr*(double)t/1000.;

while(count-- >0) write(fd,&l_zero,sizeof(float));

}

//outputs a stream of floats at given sample rate to be used for ASK or FSK modulation in gnuradio

void transmit(int fd, unsigned int sr, uint8_t *outcode, uint8_t outcodelen)

{

unsigned int te = .0004*sr; //basic pulse element

int i,j;

float *l_zero_array = malloc(te*sizeof(float));

float *l_one_array = malloc(te*sizeof(float));

for(i=0; i<te; ++i) l_zero_array=l_zero;

for(i=0; i<te; ++i) l_one_array=l_one;

//preamble

for(i=0; i<12; ++i)

{

write(fd,l_zero_array,te*sizeof(float));

write(fd,l_one_array,te*sizeof(float));

}

//header

for(i=0; i<10; ++i) write(fd,l_zero_array,te*sizeof(float));

//pwm encoded bits

uint8_t obitcount=0, obytecount=0;

for(i=0; i<=outcodelen; ++i)

{

unsigned char bit = outcode[obytecount]& (1<<obitcount);

write(fd,l_one_array,te*sizeof(float));

if(i==outcodelen) break;

write(fd,bit?l_zero_array:l_one_array,te*sizeof(float));

write(fd,l_zero_array,te*sizeof(float));

if(++obitcount==8) {obitcount=0;++obytecount;}

}

free(l_zero_array);

free(l_one_array);

}

int main(int argc, char **argv)

{

if(argc!=2) {fprintf(stderr,"Usage: %s outputfile\n",argv[0]); exit(1);}

int fd ;

fd=open(argv[1],O_WRONLY|O_CREAT,0777);

if(fd<0) {perror("cannot open output file"); exit(errno);};

#define MAXOUTCODELEN 256

uint8_t outcode[MAXOUTCODELEN];

uint8_t outcodelen;

KEELOQ_CODE keeloq_crypt=0x123456789abcdef0LL;

//encrypt something

{

uint16_t counter=1111;

outcode[0]=counter&0xff;

outcode[1]=counter>>8;

outcode[2]=0x78;

outcode[3]=0x23;

encrypt((uint32_t *)outcode,&keeloq_crypt);

outcode[4]=0x53;

outcode[5]=0x4d;

outcode[6]=0x08;

outcode[7]=0x20;

outcode[8]=0x02;

outcodelen=65;

}

int i;

printf("TX code: ");

for(i=0; i<9; ++i) printf("%02x ",outcode);

printf("\n");

unsigned int sr=50000; //sampling rate

//just a test - transmit constant data repeatedly

while(1)

{

transmit(fd,sr,outcode,65);

delay_ms(fd,sr,500); //every 500 ms

}

close(fd);

}

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...