Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: Gökhan BEKEN - 26 Ağustos 2015, 14:30:21

Başlık: stm32f4 AES ECB DECRYPT problem
Gönderen: Gökhan BEKEN - 26 Ağustos 2015, 14:30:21
#include "stm32f4xx_cryp.h"
extern ErrorStatus CRYP_AES_ECB(uint8_t Mode,
                         uint8_t *Key, uint16_t Keysize,
                         uint8_t *Input, uint32_t Ilength,
                         uint8_t *Output);

int main(void) {
SystemInit();

/* Enable CRYP clock */
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE);



unsigned char key_[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
unsigned char out_[16];
unsigned char intputVeri_[16]="deneme123456"; // 16 adet

ErrorStatus hata=0;

hata=CRYP_AES_ECB(MODE_DECRYPT,key_,128,intputVeri_,16,out_);
if(hata == SUCCESS){
//buraya girmiyor
}
if(hata == ERROR){
//buraya giriyor
}
}



16 byte'lık şifrelenmiş veriyi ve anahtarı verip, çevrilmiş halini almak istiyorum, ama kütüphanede Keysize olarak "128, 192 or 256" istiyor, bunun sebebini anlayamadım, kullanımımda hata mı var?

Kullanım klavuzu:

/**
  * @brief  Encrypt and decrypt using AES in ECB Mode
  * @param  Mode: encryption or decryption Mode.
  *          This parameter can be one of the following values:
  *            @arg MODE_ENCRYPT: Encryption
  *            @arg MODE_DECRYPT: Decryption
  * @param  Key: Key used for AES algorithm.
  * @param  Keysize: length of the Key, must be a 128, 192 or 256.
  * @param  Input: pointer to the Input buffer.
  * @param  Ilength: length of the Input buffer, must be a multiple of 16.
  * @param  Output: pointer to the returned buffer.
  * @retval An ErrorStatus enumeration value:
  *          - SUCCESS: Operation done
  *          - ERROR: Operation failed
  */

Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: X-Fi - 26 Ağustos 2015, 15:00:38
Hocam kriptolama için kullandığınız key 16 byte yani 128 bit daha uzun keyler kullandığınızda seçimi 192 yada 256 olarak değiştirebiliyorsunuz.

Şifrelemede ya da çözümlemede kullanılacak keyin uzunluğunu kütüpaneye bildirmeniz lazım.
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Gökhan BEKEN - 26 Ağustos 2015, 15:13:40
Teşekkürler hocam, ben byte cinsinden istiyor sanmıştım ama 128 versem de işe yaramıyor.
uint32_t Ilength kısmına gireceğimiz değer de mi bit cinsinden?
Yani oraya da mı 128 yazmam lazım, 16byte veri çözmek için?
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: X-Fi - 26 Ağustos 2015, 15:53:36
Emin değilim bu kütüpaneyi tanımıyorum bir projemde cortex m3 işlemcide DES ve AES çözmek için açık kaynaklı "Cyclone Crypto" kütüpanesini kullanmıştım. Kullanımı hemen hemen aynıdır bi dene istersen.

Genelde AES doğrulamasını da buradan yaparım http://extranet.cryptomathic.com/aescalc/index (http://extranet.cryptomathic.com/aescalc/index)
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Gökhan BEKEN - 26 Ağustos 2015, 16:12:01
Bu kütüphane donanımsal olduğu için kullandım hocam, normalde çalışan yazılımsal bir kütüphane kullanıyorum ama çok hızlı olması gereken işlemlere yetişemiyor. Donanımsal olursa hızlı çalışır diye düşündüm bu yüzden böyle deniyorum.
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: X-Fi - 26 Ağustos 2015, 16:36:38
STM32F407 kullanıyorsun sanırım eğer öyleyse bu çipde güvenlik anlaşmaları nedeniyle AES peripheral donanımı yok. Çalışmama sebebi bu olabilir. AES Donanımı olan seri STM32F417. Ayrıca aes'i olan bir çip bulman zordur az sayıda askeri uygulamalar için üretiliyor proje göstermen onay alman falan gerekiyor.

Aşağıdaki linkde de Aes ayrımını belirtmiş;

http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN11 (http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1577/LN11)
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: AsHeS - 26 Ağustos 2015, 20:54:38
Alıntı yapılan: X-Fi - 26 Ağustos 2015, 15:53:36
Emin değilim bu kütüpaneyi tanımıyorum bir projemde cortex m3 işlemcide DES ve AES çözmek için açık kaynaklı "Cyclone Crypto" kütüpanesini kullanmıştım. Kullanımı hemen hemen aynıdır bi dene istersen.

Genelde AES doğrulamasını da buradan yaparım http://extranet.cryptomathic.com/aescalc/index (http://extranet.cryptomathic.com/aescalc/index)
@X-Fi hocam lisans sorununu nasıl çözdünüz  ?
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Burak B - 27 Ağustos 2015, 01:09:20
@Gökhan BEKEN hatayı çözebildin mi ?


    unsigned char intputVeri_[16]="deneme123456"; // 16 adet <----- Evet 16 Byte tanımlamışsın ama padding hatalı. (Aslında bu hem makul hem problemli bir durum ne yaptığını bilip bilmediğine bağlı)
    ...
    hata=CRYP_AES_ECB(MODE_DECRYPT,key_,128,intputVeri_,16,out_);  // ENCRYPT mi yapacaksın DECRYPT mi ?


- Verileri stackte saklayacaksan uzunluğundan ve içerisindeki verilerden emin ol.
- Fonksiyona verdiğin veriler şifrelenmemiş; şifrelemek mi istiyorsun şifresini çözmek mi ? Şifreleyeceksen MODE_ENCRYPT yazmalısın.
- Yukarıda arkadaşların da söylediği gibi kullandığın MCU HW Crypto barındırıyor mu ? Genelde STM32Fx1x serisi MCU'lar HW Crypto barındırır.
- AES(Rijndael)'i ne amaçla kullanıyorsun. Bu bir block cipher. Yani sırf verileri şifreliyor diye heryerde kullanamazsın. Kullanırsan tasarım ve uygulama hataları yüzünden emeklerin boşa gitmiş olur.
- Bilgi notu olarak AES, Amerika tarafından seçilmiş bir algoritmadır. Yakın tarihlerde bir arkakapı barındırdığına dair makaleler de çıktı.
- MCU üzerinde koşan bu tip algoritmalar MCU' yu çok meşgul ettiği için direkt olmasa bile non-invasive diye tabir edilen harici yollarla saldırıya uğramaya açık olurlar.

Ek: Unutmadan AES simetrik anahtarlı bir cipher. Yani şifrelemek ve çözmek için aynı anahtarı kullanmak zorundasınız. Bunu istediğinize emin misiniz ?
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Gökhan BEKEN - 27 Ağustos 2015, 01:23:24
@Burak BAYRAK hocam,  discovery'den stm32f407'yi çıkartıp stm32f417 alıp takmayı planladım en son.
Yani sorun hala devam ediyor.
AES ECB kullanıyorum amacım şifrelenmiş veriyi çözmek olduğundan MODE_DECRYPT olarak kullandım.
Bunu yazılımsal yapabiliyorum şu an ama işime gelmiyor, 240byte'lık diziyi toplam 6.5ms'de çeviriyor, bu da programın aksamasına sebep oluyor.
Şu an istesem de başka bir şifreleme metodu kullanamam, ben bir alıcı yapıyorum ve vericinin gönderdiği veriye müdahele edemiyorum.
Bu yüzden sistem AES ECB olmak zorunda.

Alıntı YapBu bir block cipher. Yani sırf verileri şifreliyor diye heryerde kullanamazsın. Kullanırsan tasarım ve uygulama hataları yüzünden emeklerin boşa gitmiş olur.
Bu kısmı açar mısınız hocam, block cipher olunca neden heryerde kullanılmaz?
Ben normalde 16 byte'lık seriler halinde çeviriyorum , toplamda 15*16=240 byte veri çevrilmiş oluyor 15 adımda.


Bu proje için değil de genel kültür açısından soruyorum, hangi şifreleme algoritmalarını, hangi durumlarda tavsiye ediyorsunuz?

mesaj birleştirme:: 27 Ağustos 2015, 01:40:11

Bu arada "padding hatalı" demişsiniz ama anlamadım bu kısmı. "padding" nedir? Benim bildiğim html'de iç kenar boşluğunu ayarlarken kullanılıyordu ama c dilinde böyle bir kavram duymadım.
normalde o dizideki veri RF ile geliyor yani sürekli değişiyor.
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Burak B - 27 Ağustos 2015, 02:08:17
Yazılımsal kullanım için: Veriyi alırken DMA kullanmak gibi bir imkanın yok mu ? Varsa Veriyi bufferla. 6.5ms için gereken hafıza hesabını veri akış hızı üzerinden hesapla. Yeterli gelecek kadar iki hafıza alanını buffer olarak tahsis et. Buffer dolana kadar sen DECODE işini bitirmiş olursun. Hafızaları yer değiştirirsin DMA diğerini doldururken sen gelen üzerinde çalışırsın. DMA ve IRQ kullanma ihtimalin yoksa ASM ile optimize bir AES entegre etmeye çalış hızını artıracaktır. Ayrıca şunu da unutma deşifre işlemini istediğin an durdurabilirsin ve devam ettirebilirsin ama gelen veri için bunu yapamazsın. Bu nedenle gelen veriyi bufferlamak daha öncelikli ve önem arzeden bir iş.

Donanımsal kullanacaksan: İşin daha kolay interruptları var zaten. Bunu daha açıklamaya gerek yok sanırım.

Tavsiye konusu göreceli bir durum. Mesela AES bir Block Cipher olmasına rağmen işletim moduna göre Stream Cipher olarak ta kullanılabiliyor. Ama kesinlikle ECB modu buna uygun değil diyebilirim. Şifreleme algoritmaları güvenlik modeline ve ihtiyaçlarına göre tercih edilir. Yani sizin neyi saklamak istediğiniz ve bunu başarmak için başka şeyleri saklamanızın gerekip gerekmediği bile düşünülmelidir. SSL için kullandığımız güvenlik sertifikaları bu gibi durumlara iyi birer örnektir. Hatta SSL' in kendisi de iyi bir örnektir. Piyasada tonla algoritma mevcut konu birkaç satır ile anlatılabilecek bir konu değil açıkcası.

Alıntı yapılan: Gökhan BEKEN - 27 Ağustos 2015, 01:23:24

mesaj birleştirme:: 28 Ağustos 2015, 01:40:11

Bu arada "padding hatalı" demişsiniz ama anlamadım bu kısmı. "padding" nedir? Benim bildiğim html'de iç kenar boşluğunu ayarlarken kullanılıyordu ama c dilinde böyle bir kavram duymadım.
normalde o dizideki veri RF ile geliyor yani sürekli değişiyor.

Bu konu yaygın bir bilgi eksikliği ve düşünce yanılgısı yüzünden böyle algılanıyor. Yani "AES/Kripto = şifreleme ve güvenlik" gibi algılanıyor. Aslında doğru kullanılmadığında hiçbir işe yaramıyorlar. Padding konusu da şöyle AES bir block cipher. 128 bitlik blokları alıyor ve işliyor. Sonucunda size okunamaz halde bir veri bloğu sunuyor. Yani siz algoritmaya 1 byte veri bile girseniz algoritma her halükarda o verinin pointerından başlayıp 16 byte veri işliyor. Bu durumda sizin girdi olarak kullanacağınız PlainText diye tabir edilen girdinizi parçalayıp 16 bytelık bloklara bölmeniz gerekiyor. Eğer veri 16 byte dan az ise bu durumda veriyi pad ederek 16 byte şişirmeniz gerekiyor. İşte padding basitçe bu manaya geliyor. PAdding önemli bir konu zira zayıf padding algoritmanın güvenliğini de zayıflatan bir durum diyebillirim.

Senin kodunda verilerin stackte olduğu ve bufferı temizlemediğin için öngörülemez durumda. Bu hem iyi hemde kötü bir durum. :)

Son olarak verici cihazın firmware güncellemesi v.s. gibi özellikleri var mı ?
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: MrDarK - 27 Ağustos 2015, 08:41:03
Ahh ahh aes bende az uğraşmadım. Ama sağ olsunlar yardım ettiler. Ben yazılımsal AES kullandım.

Belki konusu değil ama hazır AES'ci leri bir arada yakalamışken birşey sormak istiyorum.

Örneğin içinde SELAM yazan bir data padding edildi ve şu hale geldi

"SELAM00000000000"

Kriptolu halide şu olsun "abcdefghıijklmno" bunu karşı tarafa gönderdiğimizde birşey yapıyor diye farz edelim. Adam bizim kartı alsa bu bilgiyi rf vericiden çıkmadan önce dinlese ve kaydetse sonra tek tek gönderdiğim komutları deneyerek kullansa burada güvenlik kalmış oluyor mu ? Bence kalmıyor adam benim sistemimi anahtarlayarak bozmuş oldu. Bununla ilgili neler yapılabilir güvenlik için, veya güvenlik için yapılması gereken başka püf noktalar var mıdır ?
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: iyildirim - 27 Ağustos 2015, 09:27:51
@MrDarK Hocam sabit bilgiyi sabit bir key ile şifreliyorsanız çıktı aynı olacağından, bu kriptolanmış veriyi başka bir şekilde gönderdiğinizde alıcının bunu anlaması imkansız.
Çözüm olarak değişken key kullanmak veya daha basiti dataya değişken çöp bilgi eklemek olabilir.
RTC den alınacak zaman bilgisi veya random veri ile padding yapmak gibi.

Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Gökhan BEKEN - 27 Ağustos 2015, 22:04:13
Sorun çözülmüştür, ilgilenen herkese teşekkür ederim.
STM'in yayınladığı(!) hem hardware ve hem software destekleyen bir kütüphane buldum. Normalde 6.5ms'de çevirdiğim işi artık 165 us'de çevirebiliyorum.
Donanımsal kullanmama gerek kalmadı.
Ancak kütüphane .lib dosyası olduğu için taşınabilir değil, zaten stm için asm yazmışlardır büyük ihtimal, bu yüzden taşınmasına gerek yok.

kullanımı: http://www.st.com/st-web-ui/static/active/cn/resource/technical/document/user_manual/CD00208802.pdf (http://www.st.com/st-web-ui/static/active/cn/resource/technical/document/user_manual/CD00208802.pdf)
indirmek için biraz uğraşmanız gerekiyor: http://www.st.com/web/en/catalog/tools/PF259409 (http://www.st.com/web/en/catalog/tools/PF259409)
üye girişi yaptıktan sonra sepete ekliyorsunuz, bir süre sonra size link geliyor.
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Gökhan BEKEN - 09 Eylül 2015, 17:05:52
@Burak BAYRAK hocam, bu arada belirtmek istedim, ne olur ne olmaz diye sipariş etmiştik stm32f417'yi ama standart kullanıcılara satmıyorlarmış.
Onu almak için bazı lisanslar vermemiz gerekiyormuş.
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Burak B - 09 Eylül 2015, 20:41:54
Biliyorum. Bu tip algoritmaları içeren her türlü ürünün Amerika dışına çıkarılması v.b. gibi durumlar için tonla bilgi ve belge istenir. Hatta bazılarına izin verilmez. Bu durumda şu soru akla gelebilir "Bunların kodları heryerde yok mu ? Internette bir sürü örnek var.". Evet, var ama;

Export of Crypto from USA (https://en.wikipedia.org/wiki/Export_of_cryptography_in_the_United_States)
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: CoşkuN - 10 Eylül 2015, 09:01:08
Alıntı yapılan: Burak BAYRAK - 09 Eylül 2015, 20:41:54
Biliyorum. Bu tip algoritmaları içeren her türlü ürünün Amerika dışına çıkarılması v.b. gibi durumlar için tonla bilgi ve belge istenir. Hatta bazılarına izin verilmez. Bu durumda şu soru akla gelebilir "Bunların kodları heryerde yok mu ? Internette bir sürü örnek var.". Evet, var ama;

Export of Crypto from USA (https://en.wikipedia.org/wiki/Export_of_cryptography_in_the_United_States)
ST Amerikan firması değil ama ilginç
Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: Burak B - 10 Eylül 2015, 11:40:53
@CoşkuN, haklısın ST amerikan firması olmayabilir ancak kullandıkları algoritmalar öyle değil. Mesela STM32 lerde kullanılan AES algoritmasının asıl adı Rijndael'dir. ABD tarafından adapte edilip patentlendiği için algoritmanın ihraç edilmesi kanunlarla bağlanmıştır. Aynı şekilde bu chiplerde kullanılan diğer algoritmalar içinde bu durum geçerli. Tabiki bu durum her algoritma bu şekildedir anlamına gelmez. Ancak söz konusu elektronik cihazlar ise hele de çok kullanılan bu tip MCU v.s. ise işin içinde ABD, Israil v.s. parmağı olur. Dünyaya dayattıkları standartlar gereği ST firması MCU' sunu bu şekilde satabilmek istiyorsa bu standartlara uyar. Adamların müdahale edemedikleri yerlerde şirketlere sızıp gizlice chiplere arka kapılar bıraktığı da bilinen gerçekler arasında.

Bakınız AES Algorithm - Wiki (https://en.wikipedia.org/wiki/Rijndael)

Birde şöyle yanlış bir algı var. Konuya hakim olmayanlar AES, SHA, MD5, RSA gibi algoritmaların kriptografinin tamamını oluşturduğunu düşünüyorlar. Hal böyle oluncada ortaya çok ilginç tablolar çıkıyor. Halbuki ortalıkta dolaşan o kadar çok algoritma varki pazar yeri gibi.

Ben bu konunun uzmanı değilim, bilmek için uzman olmak gerekmiyor. Sadece okumak lazım. Merak edenler biraz wiki, google v.s. araştırma yapsın konuyu daha iyi kavrayacaklardır.

Başlık: Ynt: stm32f4 AES ECB DECRYPT problem
Gönderen: engerex - 10 Eylül 2015, 13:01:19
 Bu biraz şuna benziyor. Microsoft Android linux tabanlı olmasına rağmen Samsung gibi büyük bazı üreticilerinden cihaz başı 1-10 dolar lisans ücreti alıyor. Sebep Windows'un patentli teknolojilerini barındırması. Ancak bir çok üreticiden, dağıtımlardan veya sonradan yükleyen bir çok kişilerden bir talepte bulunduğunu duymadım. İşine gelmezse bu alanlara da dallanabilir.