V_IMA
-
Постов
3 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные V_IMA
-
-
Для иллюстрации работы алгоритма к статье прикреплена простая реализация ГОСТ 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). Таким образом ключи каждый раз разные и в программе нигде ключ никакой хранить не нужно. Этот метод не решает задачу аутентификации - в этом случае нужно применить ЭЦП - что потребует в кого то зашить закрытый ключ.
0 -
Здравствуйте! Помогите пожалуйста с реализацией алгоритма защищенного канала связи, задача и блок схема такая:
1. Приемник шлет передатчику сообщение, что он хочет начать процедуру авторизации (по сути абсолютно любое сообщение, например сигнатуру).
2. Передатчик генерирует случайную последовательность байт (например 8 байт, один блок шифрования) и предает эти данные приемнику (сами данные он сохраняет в памяти как «исходные»).
3. Приемник шифрует полученный блок данных и отправляет обратно, передатчику.
4. Передатчик расшифровывает полученные данные и сравнивает с «исходными». Если данные совпадают – авторизация прошла успешно.
Помогите пожалуйста,написать алгоритм шифрования или помогите пожалуйста с литературой,исходниками. Если кому не жалко. В программировании новичок и в криптографии тоже. Пыталась реализовать задумки по программному кейлогу,найденной информацией из интернета,также aes и des. Среда разработки coocox,микроконтроллер stm32f100rbt6,rfm22 радиомодуль,частота передачи 433МГЦ,тактовая частота 24МГц. Буду очень благодарна за помощь.
0
Закодированная Передача Данных
в Роботы и модели на ДУ-управлении
Опубликовано
Программный кейлог,проблема с подключением библиотек,заменой в 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);
}