Picproje Elektronik Sitesi

TEKNİK SERVİS => Genel Bilgi, Notlar, E-Kitap, İp uçları => Konuyu başlatan: AST - 16 Temmuz 2013, 11:41:28

Başlık: AES ve Rolling Code
Gönderen: AST - 16 Temmuz 2013, 11:41:28
Selamlar,

AES şifreleme ve rolling code arasındaki fark nedir.
Bir RF uygulamasında şifreleme yapmam gerekiyor.Kolay bir şekilde nasıl çözüm sağlanabilir.
Başlık: Ynt: AES ve Rolling Code
Gönderen: ferdem - 16 Temmuz 2013, 13:39:09
AES bir şifreleme türü; rolling code ise her defasında yeni bir kod üreten sistemin adı, AES ile direkt ilgili olmak zorunda değil.
Detaylı bilgim yok ancak rolling code ile ilgili şu anahtar kelimeleri önerebilirim: Microchip, KeeLoq.
Başlık: Ynt: AES ve Rolling Code
Gönderen: yxsdf - 16 Temmuz 2013, 17:40:22
AES en yaygın kullanılan blok şifreleme türüdür. Rolling codelar ya da "code hoping" sistemler, şifrelemeden ziyade iki tarafında ortak bir ilk anahtar kullanarak aynı sayı üzerinde anlaşmalarıdır. Araba uzaktan kumandaları, bankaların tek kullanımlık şifre yazılımları bunlara örnektir. Araba anahtarlarında kullanılan en meşhur sistem microchip tarafından geliştirilen, doğrusal olmayan geri beslemeli kaydırmalı yazdırgaç (non-linear LFSR) yapısı üzerine kurulu Keeloq algoritmasıydı ancak algoritmadaki zayıflıklardan dolayı artık kullanılmıyor.

Rolling kodlar kullanarak şifreleme yapamazsınız, sadece doğrulama amaçlı kullanılabilirler. Şifreleme için simetrik ya da asimetrik şifreleme sistemleri kullanmalısınız. Eğer iletişim yapılacak her iki tarafa da önceden anahtar yükleme durumunuz varsa simetrik sistem kullanmak işinizi görecektir. Dediğim gibi en sık kullanılan simetrik sistem AES'tir. Ancak RC4 ya da 3DES gibi alternatiflerde güvenle kullanılabilir. Asimetrik kripto apayrı bir hikaye, ona değinmiyorum bile.

Eğer şifreleme kullanmayı düşündüğünüz verinin formatı, kullandığınız ekipmanları vs. yazarsanız nokta atışı daha detaylı bilgiler yazmaya çalışırım.
Başlık: Ynt: AES ve Rolling Code
Gönderen: AST - 17 Temmuz 2013, 10:13:48
Cevaplar için teşekkürler.

Yapılacak sistem rf üzerinden karşılıklı mesaj gönderme işlemi.Bende bu iletişimin şifreli olmasını istiyorum.Veri formatı basit ABCD1234 gibi bir data.
Mcu olarak Atmel AVR kullanmayı düşünüyorum.Birde AES sisteminde öğrenmek istediğim mesela "A" datasını her gönderdiğinizde farklı bir kodlama ile mi gönderiyor?Öyle olması gerekli diye düşünüyorum.
Başlık: Ynt: AES ve Rolling Code
Gönderen: yxsdf - 17 Temmuz 2013, 11:01:07
AES blok bir şifreleme sistemidir ve 128-bit (16 byte boyutundaki) girdiyi yine 128-bit (16-byte) boyutunda çıktıya dönüştürür. Bunun için 128-bit, 192-bit ya da 256-bit uzunluğunda anahtar kullanmanız gereklidir. Anladığım kadarı ile sizin göndereceğiniz veriler öyle uzun veriler değil, o yüzden blok şifreleme sistemi sizin için kısmen kullanışsız olacaktır. Çünkü, örneğin, göndereceğiniz veri 4 byte olsun, "DATA" stringini şifrelemek istiyorsunuz, fakat AES algoritması 16 byte veri girdisi kabul ettiği için bu 4 byte lık bilgiyi bir şekilde 16 byte a uzatmanız gerekecek. Bunun için de padding ismi verilen uzatma yöntemlerini kullanmanız gerekecek.

Bunun yerine, akış şifreleme (stream cipher) kullanmanız işlerinizi çok daha kolay hale getirecektir. Örneğin RC4 oldukça sık kullanılan, hızlı çalışan ve mikrokontrolcülerde de kolaylıkla implement edilebilen girdileri 1-byte 1-byte olarak şifreleyebilen bir sistemdir. Örneğin, yine yukarıdaki "DATA" verisini ele alırsak, bunu şifrelemek için RC4 algoritmasının 4 kere çalışması yeterli olacaktır.
Tabi burada önemli bir problem de senkronizasyon problemi, her iki taraftada RC4 aynı sayıda çalıştırılması gerektiği için arada iletilemeyen veriler olduğunda bu sayılar tutmayacağı için senkronizasyonu yenilemeniz gerekecektir. Bu yüzden bu işlemi asenkron yapmaya yarayan tasarımlar ( https://www.google.com.tr/search?q=asynchronous+stream+cipher (https://www.google.com.tr/search?q=asynchronous+stream+cipher) ) var onları incelemeniz faydalı olacaktır.

Ancak, veri kaybı durumu çoksa, yani verinin iletilememsi durumu sık sık oluyorsa akış şifreleme sizin için kullanışsız olacaktır. Bu yüzden blok şifreleme kullanmanız daha kolay olacaktır. Bunun içinde padding yöntemlerini incelemeniz faydalı olacaktır.

mesaj birleştirme:: 17 Temmuz 2013, 11:04:41

Normalde simetrik şifreleme sistemleri deterministiktir. Yani aynı girdiyi ve aynı anahtarı verirseniz aynı çıktıyı alırsınız. Ancak bu durumu aşmak için, anahtarla birlikte "initialization vector (IV)" denilen ve her seferinde rastgele üretilen ve gizli olmayan (yani şifreli mesajın yanında açıktan gönderilebilir) bir bilgi de şifreleme sistemine verilmektedir. Bu sayede deterministik olan sistem rastgele görünümlü hale gelir. Ve artık aynı veriyi şifreleseniz bile farklı çıktılar alırsınız, tabi kullandığınız IV ler farklı olduğu sürece.
Başlık: Ynt: AES ve Rolling Code
Gönderen: AST - 17 Temmuz 2013, 16:05:49
Göndereceğim datalar 15 byte ile 25 byte arasında değişiyor.Ben AES sisteminin kabul edeceği girdiye göre göndereceğim datayı düzenlerim.Elimde AVR ile yazılmış hazır bir kütüphane var.Bunun üzerinden gitmem gerekiyor şimdilik.Verdiğiniz bilgiler aydınlatıcı oldu, teşekkürler.

http://avrcryptolib.das-labor.org/trac/wiki/AES (http://avrcryptolib.das-labor.org/trac/wiki/AES)

#include <stdint.h>
#include "aes.h"

...
/* a sample key, key must be located in RAM */
uint8_t key[]  = { 0x01, 0x23, 0x45, 0x67,
                   0x89, 0xAB, 0xCD, OxEF,
                   0x01, 0x23, 0x45, 0x67,
                   0x89, 0xAB, 0xCD, OxEF };
/* sample data, you can encrypt what you want but keep in mind that only 128 bits (not less not more) get encrypted*/
uint8_t data[] = { 0x01, 0x02, 0x03, 0x04,
                   0x05, 0x06, 0x07, 0x08,
                   0x09, 0x0A, 0x0B, 0x0C,
                   0x0D, 0x0E, 0x0F, 0x00 };
aes128_ctx_t ctx; /* the context where the round keys are stored */
aes128_init(key, &ctx); /* generating the round keys from the 128 bit key */
aes128_enc(data, &ctx); /* encrypting the data block */

...

aes128_dec(data, &ctx); /* decrypting the data block */

...
Başlık: Ynt: AES ve Rolling Code
Gönderen: atioky_216 - 18 Temmuz 2013, 00:14:38
Doğrudan AES şifreleme türüne destek veren kablosuz haberleşme protokollerinden birkaçını kullanmışlığım var hatta geçenlerde 'acaba şifreleme dongusu oluşturarak bunu nasıl değişik yönleri ile kullanabilirim' diye düşünmüştüm.

Sabit AES anahtarı kullanmayıp anahtar matrislerinde bir yeni matris tanımlayarak denemey de yapmayı düşünüyorum. Örneğin 128X1 yerine 128X32 gibi.. Hangi anahtarın ne hangi zaman dilimlerinde kullanılacağını da başka fonksiyon ile belirleyeceğim. Ama sorun çıkabileceğini düşündüğüm nokta zamanlama. Hepsinde aynı zmanda aynı anahtarı kullanıp-kullanamayacağımdan emin değilim.

Zaten AES işini mcu içindeki birim yaptığı için bize iş çıkmıyor. Bir de AES128' de bile bu kadar güvenlik var iken bu kadar detaya girmek gerekli mi ona da emin değilim, benimkisi merak  ::)

Tabi bu 'Rolling Code' a girer mi bilmem.
Başlık: Ynt: AES ve Rolling Code
Gönderen: yxsdf - 18 Temmuz 2013, 11:39:35
Anahtarları bir sırayla kullanma fikri çok iyi bir fikir değil, onun yerine IV kullanımı daha kolay olur. Örneğin yukarıdaki implementation da IV desteği yok, o yüzden 128-bit anahtarın bir kısmını IV olarak kullanabilirsiniz. 128-bit'in son 32 bitini her seferinde farklı seçerek ve bu 32 biti gönderdiğiniz mesajın yanında göndererek güvenlik seviyesini biraz olsa da düşürerek basit bir IV sistemi yapabilirsiniz. Bu durumda güvenlik 128-32 = 96-bit'e düşmüş olacak. Çok kritik şifrelemenin gerekmediği durumlarda bu bir çözüm olabilir.

Ya da size daha güvenli ancak bir basamak daha yorucu bir sistem söyleyeyim. Elinizde AES için 128-bitlik bir anahtar olsun. Bunu, direkt bilgilerinizi şifrelemek için kullanmayın. Önce, 128-bitlik bir rasgele bir değer (IV) üretin, bu değeri elinizdeki AES anahtarını kullanarak şifreleyin. Şifreleme sonucu oluşan 128-bitlik çıktıyı verilerinizi şifrelemek için anahtar olarak kullanabilirsiniz. Böylece güvenlikten de ödün vermemiş olursunuz.
Başlık: Ynt: AES ve Rolling Code
Gönderen: gokhangokcen - 08 Mart 2014, 21:39:51
arkadaşlar merhaba; konuyu biraz hortlatmış gibi olacağım ama yeni konu açmak istemedim. Arkadaşın dediği gibi rf ile göndermiş olduğum dataları şifrelemem gerekiyor. Bir verici üzerinden yaklaşık 200 alıcı cihaz kullanılacak. Vericinin gönderdiği kodu çözmek kolay olmamalı.Nasıl bir yol izlemeliyim nasıl bir algoritma kurmam gerekir? Biraz araştırma yaptım forumda bir kaç değerlendirmeyi okudum. Rolling Code anladığım kadarı ile verici her seferinde farklı bir değer ile veri gönderiyor alıcı ise şifrelenmiş veriyi çözüp kendi değeri ile aynı mı diye kontrol edip işlem yapıyor. AES şifrelemenin mantığını tam kavrayamadım. Algoritmasına internette epeyce bakındım ama çözümleyemedim. Elinde AES ya da Rolling Code algoritması olan var mı? ya da internette detaylı açıklamasına algoritmasına rastlayan oldu mu? link vs gönderebilirseniz inceleyebilirim.İsteğim alıcı tek bir değere bağlı kalmasın bir gün x, bir gün y, birgün z kodunu göndersin ama verici her zaman aynı kodu çözümleyebilsin istiyorum.


Başlık: Ynt: AES ve Rolling Code
Gönderen: gokhangokcen - 10 Mart 2014, 09:01:29
güncel
Başlık: Ynt: AES ve Rolling Code
Gönderen: barisertekin - 10 Mart 2014, 13:54:51
Ben de sizinle aynı şeyi yapmak için konu açmıştım cevap alamadım :)

STM32F4 içinde dahili AES crypto module var. Bunu kullanmak için bakındım ama hiç örnek bulamadım.
Veya sadece AES crypto yapan chip'ler var. Bu chip'ler crypto yaptı diyelim. Aynı zamanda decrypto yapıyor mu? Bu sorulara cevap bulamamıştım.

Crypto.h
https://github.com/karlp/kkstm32_base/blob/master/example/stm32f4/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h (https://github.com/karlp/kkstm32_base/blob/master/example/stm32f4/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_cryp.h)
Başlık: Ynt: AES ve Rolling Code
Gönderen: gokhangokcen - 10 Mart 2014, 14:19:57
devlet sırrı niteliğinde bir konu değil sanırım umarım daha önce uğraşmış ve/veya bilgi sahibi birileri vardır  :)
Başlık: Ynt: AES ve Rolling Code
Gönderen: barisertekin - 10 Mart 2014, 14:32:55
Birşeyler buldum. Vaktim olsa oturup test edicem. İstersen bak kodlar gayet açık.


crypto_set_key(CRYPTO_KEY_128BIT,key);
crypto_set_iv(iv); /* only in CBC or CTR mode */
crypto_set_datatype(CRYPTO_DATA_32BIT);
crypto_set_algorithm(ENCRYPT_DES_ECB);

crypto_start();
crypto_process_block((uint32_t*)plaintext, (uint32_t*)ciphertext, 8 / sizeof(uint32_t));
crypto_stop();


decode the previously encoded message  from ciphertext to plaintext2


crypto_set_key(CRYPTO_KEY_128BIT,key);
crypto_set_iv(iv); /* only in CBC or CTR mode */
crypto_set_datatype(CRYPTO_DATA_32BIT);
crypto_set_algorithm(DECRYPT_DES_ECB);

crypto_start();
crypto_process_block((uint32_t*)ciphertext, (uint32_t*)plaintext2, 8 / sizeof(uint32_t));
crypto_stop();


https://github.com/BuFran/libopencm3-examples/blob/e2eb2b49fd401440577bbb27d7f9f7a7e64886c3/examples/stm32/f4/other/crypto-basic/cryptobasic.c (https://github.com/BuFran/libopencm3-examples/blob/e2eb2b49fd401440577bbb27d7f9f7a7e64886c3/examples/stm32/f4/other/crypto-basic/cryptobasic.c)
Başlık: Ynt: AES ve Rolling Code
Gönderen: gokhangokcen - 10 Mart 2014, 14:41:15
üstad ben tam çözümleyemedim kodu :)
Başlık: Ynt: AES ve Rolling Code
Gönderen: barisertekin - 10 Mart 2014, 14:53:09
Linkten bakarsan daha açıklayıcı olur.

İlk kod şifreleme yapıyor. İkinci kod şifreyi çözüyor. Linkte devamı var.  Doğru çözmüş mü diye iki değişkeni karşılaştırıyor. Ona göre led yakıyor.
Crypto.h kütühanesini kullanmış. Kütüphane dosyaları da bu linkte
https://github.com/libopencm3/libopencm3/tree/master/include/libopencm3/stm32/f4 (https://github.com/libopencm3/libopencm3/tree/master/include/libopencm3/stm32/f4)
Başlık: Ynt: AES ve Rolling Code
Gönderen: barisertekin - 10 Mart 2014, 15:59:46
Ben bunu daha önce nasıl göremedim.
Televizyonda cep telefonu operatörlerinin reklamlarında altta geçen minik yazılar olur ya kimse göremesin diye.

(http://s8.postimg.cc/hhxsqlifp/STM32_F4.jpg)

Crypto/hash processor on STM32F417 and STM32F415 yazıyor.

Discovery Kit içinde STM32F407 var. Geçimiş olsun. Gerçi bu iş için almamıştım kiti ama insan bir içerliyor. :)