মাইক্রোকন্ট্রোলারদের জন্য ক্ষুদ্রতম এইএস বাস্তবায়ন?


38

যে কেউ মাইক্রোকন্ট্রোলারদের জন্য AES-128 রিজান্ডেল একটি ছোট, নিখরচায় বাস্তবায়নের প্রস্তাব দিতে পারে। আদর্শভাবে, PIC18 এর জন্য, যদিও সি তে সাধারণ প্রয়োগ কার্যকর হবে।

কম্পাইল axTLS বাস্তবায়ন PIC18 এবং এনক্রিপ্ট / একটি ব্লক ডিক্রিপ্ট 6KB রম এবং র্যাম 750b প্রয়োজন।

কম্পাইল rijndael-ALG-fst.c PIC18 এবং এনক্রিপ্ট / একটি ব্লক ডিক্রিপ্ট 28KB ROM এবং 0.5KB র্যাম প্রয়োজন।

কম্পাইল ব্রায়ান Gladman এর 8-বিট AES PIC18 এবং এনক্রিপ্ট / একটি ব্লক ডিক্রিপ্ট ROM- র 19KB এবং উপস্থিত RAM- র 190 বাইট প্রয়োজন।

আরও ভাল অপ্টিমাইজড পিআইসি নির্দিষ্ট ভেরিয়েন্ট উপলব্ধ?

(এক্সটিটিএলএস সংস্করণের জন্য আপডেট হওয়া র‌্যামের প্রয়োজনীয়তা)


1
এটি কি বুটলোডারের জন্য?
ড্যানিয়েল গ্রিলো

না, এটি একটি নেটওয়ার্ক অ্যাপ্লিকেশনের জন্য
টবি জাফি

মাইক্রোচিপের dsPIC এবং PIC 24 এর একটি বাস্তবায়ন রয়েছে যার কোড আকার রয়েছে 3,018 বাইট, তবে এটিতে কেবল এনক্রিপশন ছিল, কোনও ডিক্রিপশন নেই। এটি অনুমান করা আপনার পক্ষে এটি কাটবে না।
কেলেনজব

@ কেলেনজব আকর্ষণীয়, তবে আমি 8 বিট মাইক্রোসের জন্য ছোট কিছু খুঁজছি
টবি জাফি

1
@ মিমি সিলেক্ট্রিক স্টাফ হ্যাঁ, এটি AES হওয়া দরকার। আমি AES-128 ব্যবহার করে একটি বিদ্যমান সিস্টেমের সাথে আন্তঃসংযোগ স্থাপনের চেষ্টা করছি। আমি যে কোনও ছোট এইএস বাস্তবায়নে আগ্রহী, তবে আমি বর্তমানে পিক 18 কে লক্ষ্য করছি। আমি হাইটেক প্রো পিক 18 টি সংকলক ব্যবহার করছি।
টবি জ্যাফি

উত্তর:


19

আমি ভাবছি আপনি কীভাবে অ্যাকটিটিএলএস সহ 7.5 কেবি র‌্যাম ব্যবহার পেয়েছেন। কোডটির দিকে তাকালে সমস্ত প্রসঙ্গে এই কাঠামোতে সংরক্ষণ করা হয়:

typedef struct aes_key_st 
{
    uint16_t rounds;
    uint16_t key_size;
    uint32_t ks[(AES_MAXROUNDS+1)*8];
    uint8_t iv[AES_IV_SIZE];
} AES_CTX;

এই কাঠামোর আকার 2 + 2 + 4 * 15 * 8 + 16 = 504. আমি aes.c তে কোনও বৈশ্বিক পরিবর্তনশীল দেখতে পাচ্ছি না, স্বয়ংক্রিয় ভেরিয়েবলগুলি সমস্ত ছোট, সুতরাং স্ট্যাকের ব্যবহারটিও যুক্তিসঙ্গত। 7.5 কেবি কোথায় যায়? সম্ভবত আপনি এটি থেকে কেবল এইএস বাস্তবায়নটি বের করার পরিবর্তে পুরো লাইব্রেরিটি ব্যবহার করার চেষ্টা করছেন?

যাইহোক, এই বাস্তবায়নটি দেখতে বেশ সহজ দেখাচ্ছে, আমি বরং এই কোডটিতে লেগে থাকি এবং এটি অনুকূলিত করার চেষ্টা করব। আমি জানি এটি কৌশলপূর্ণ হতে পারে তবে এএসএস বিবরণ শিখলে কমপক্ষে নিখুঁত ন্যূনতম র্যাম ব্যবহার অনুমান করতে সহায়তা করতে পারে।

আপডেট: আমি এই লাইব্রেরিটি কেবল আইএ -32 লিনাক্সে সংকলন করার চেষ্টা করেছি এবং একটি সাধারণ সিবিসি এএস -128 এনক্রিপশন পরীক্ষা লেখার চেষ্টা করেছি। নিম্নলিখিত ফলাফল পেয়েছেন (প্রথম সংখ্যাটি বিভাগের দৈর্ঘ্যের হেক্স):

 22 .data         00000028  0804a010  0804a010  00001010  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 23 .bss          00000294  0804a040  0804a040  00001038  2**5
                  ALLOC

এটি .bss এর মাত্র 660 বাইট (আমি AES_CTX কে বৈশ্বিক চলক হিসাবে ঘোষণা করেছি)। .Data বেশিরভাগ আইভি এবং কী দখল করে আছে। আমি এখানে টেক্সট অন্তর্ভুক্ত করি না, যেহেতু আপনি পিকের উপর সম্পূর্ণ ভিন্ন ফলাফল পাবেন (উভয় আর্কিটেকচারে ডেটা বিভাগগুলি প্রায় একই আকারের হওয়া উচিত)।


আমি axTLS সংস্করণে 10 এর একটি ফ্যাক্টর দ্বারা ভুল লিখেছি। তুমি ঠিক বলছো. তবে, আমি এখনও
এইএসের

5
আকার বা গতির দিক দিয়ে দক্ষ? বাধা আসলে কি? মনে রাখবেন যে ছোট লাইব্রেরিগুলি সম্ভবত ধীরে ধীরে হবে - আপনি যদি বৃহত্তর (কোড বিভাগের ক্ষেত্রে) লাইব্রেরির উত্স কোডটি দেখেন তবে বেশিরভাগ ফোলাটি প্রাক-গণনা করা ধ্রুবক অ্যারেগুলির কারণে হয় is
কোড পেইন্টারগুলি

1
র‌্যাম এবং রমের পদচিহ্নের ক্ষেত্রে। গতি কোনও সমস্যা নয়, তবে আমি একটি ছোট ডিভাইসে প্রচুর কার্যকারিতা ক্র্যাম করার চেষ্টা করছি।
টবি জাফি ২৩:১৩

14

আমি জানি এই প্রশ্নটি কিছুটা পুরনো, তবে আমি সম্প্রতি সম্প্রতি নিজেই এটি নিয়ে গবেষণা করেছিলাম কারণ আমি পিসিক 16 এবং 8051-এ AES128 বাস্তবায়ন করছি, এবং তাই আমি এই প্রশ্নটি সম্পর্কেও আগ্রহী ছিলাম was

আমি এর মতো কিছু ব্যবহার করেছি: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c এবং আমার ম্যামের ব্যবহার কয়েকশো বাইট এবং বাইনারি আকারটি 3 কেবি রমের চেয়ে কম।

আমার সেরা পরামর্শটি উইকিপিডিয়া পৃষ্ঠায় http://en.wikedia.org/wiki/Block_cipher_modes_of_operation পড়ার জন্য এবং বিভিন্ন মোডগুলি বোঝার জন্য, উদাহরণস্বরূপ, OFB মোড সাজানোর ক্ষেত্রে AES কীভাবে ইসিবি মোডটিকে বেসিক বিল্ডিং ব্লক হিসাবে ব্যবহার করে। এছাড়াও XOR'ing (OFB- মোডে) এটি একটি প্রতিসম ক্রিয়াকলাপ করে তোলে, সুতরাং এনক্রিপ্ট / ডিক্রিপ্ট একই ফাংশন যা স্থান সংরক্ষণ করে।

যখন আমি বুঝতে পেরেছিলাম যে এএসএস কীভাবে কাজ করে, আমি সিটিতে এটি প্রয়োগ করতে পারি এবং তারপরে এটি এনআইএসটি স্পেসিফিকেশন ** (এটি কর! অনলাইনে পাওয়া অনেক কোড ত্রুটিযুক্ত) এর বিপরীতে পরীক্ষা করতে পারে এবং কেবলমাত্র আমার যা প্রয়োজন তা কেবল প্রয়োগ করি needed

আমি এই কাস্টমাইজেশন এবং অপ্টিমাইজেশন করে কিছু অন্যান্য আরএফ ফার্মওয়্যারের পাশাপাশি 8051 তে AES128 ফিট করতে সক্ষম হয়েছি। র‌্যামের ব্যবহার (পুরো সিস্টেমের জন্য) 2.5 কেবিবি থেকে নীচে 2 কেবিতে নেমে গেছে, এর অর্থ আমাদের 4kb এসআরএএম দিয়ে 8051 এ উন্নীত করতে হবে না, তবে সস্তা 2kb এসআরএএম সংস্করণটি ব্যবহার করা যেতে পারে।

** পরীক্ষার ভেক্টরগুলি পরিশিষ্ট এফ এ রয়েছে: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf

সম্পাদনা করুন:

অবশেষে গিথুবে কোডটি পেয়েছে: https://github.com/kokke/tiny-AES-c

আমি আকারের জন্য কিছুটা অনুকূলিত করেছি। এআরএম-এর জন্য সংকলিত হয়ে গেলে জিসিসি আকারের আউটপুট:

$ arm-none-eabi-gcc -O2 -c aes.c -o aes.o
$ size aes.o
   text    data     bss     dec     hex filename
   1024       0     204    1228     4cc aes.o

সুতরাং রিসোর্সের ব্যবহার এখন 1KB কোড, 204 বাইট র‌্যাম।

পিআইসির জন্য কীভাবে তৈরি করবেন তা আমি মনে করি না তবে 8 বিট এভিআর আটমেল মেগা 16 যদি পিকের মতো কিছু হয় তবে উত্সের ব্যবহারটি হ'ল:

$ avr-gcc -Wall -Wextra -mmcu=atmega16 -O2 -c aes.c -o aes.o
$ avr-size aes.o
   text    data     bss     dec     hex filename
   1553       0     198    1751     6d7 aes.o

সুতরাং 1.5 কে কোড এবং 198bytes র‌্যাম।


আমি অবাক হয়েছি যে 2001 সালে আমি কীভাবে বাস্তবায়ন করেছি তা কীভাবে সজ্জিত হবে। এটি এস-বাক্স তৈরি করে না; তারা অচল।
কাজ

6

আমি সম্প্রতি axTLS বাস্তবায়ন গ্রহণ করেছি এবং এটি যতটা সম্ভব সঙ্কুচিত করার জন্য কাজ করেছি। আপনি সহজেই নিজেরাই এস-বাক্সগুলি তৈরি করতে পারেন এবং কয়েকশ বাইট নিজেকে সংরক্ষণ করতে পারেন।

static uint8_t aes_sbox[256];   /** AES S-box  */
static uint8_t aes_isbox[256];  /** AES iS-box */
void AES_generateSBox(void)
{
    uint32_t t[256], i;
    uint32_t x;
    for (i = 0, x = 1; i < 256; i ++)
    {
        t[i] = x;
        x ^= (x << 1) ^ ((x >> 7) * 0x11B);
    }

    aes_sbox[0] = 0x63;
    for (i = 0; i < 255; i ++)
    {
        x = t[255 - i];
        x |= x << 8;
        x ^= (x >> 4) ^ (x >> 5) ^ (x >> 6) ^ (x >> 7);
        aes_sbox[t[i]] = (x ^ 0x63) & 0xFF;
    }
    for (i = 0; i < 256;i++)
    {
         aes_isbox[aes_sbox[i]]=i;
    }
}

আপনি সম্পূর্ণ উত্সটি এখানে পেতে পারেন: http://ccodeblog.wordpress.com/2012/05/25/aes-implementation-in-300-lines-of-code/


আপনি আপনার জিনিস জানেন, অ্যান্ড্রু। সম্মত। : ডি
অ্যালেক্স

3

আমি সিআই, এইএস -128 এ এমআইটি লাইসেন্স সহ কেবল এসইএস-মিনিট নামে একটি বাস্তবায়ন করছি । এটি সামান্য র‍্যাম / রম সহ ছোট মাইক্রোপ্রসেসরগুলি (যেমন 8-বিট) লক্ষ্য করে।

মেমরির প্রয়োজনীয়তা হ্রাস করার জন্য এটিতে alচ্ছিক অন-ফ্লাই কী শিডিউল গণনা রয়েছে (র‌্যামে সম্পূর্ণ প্রসারিত কী শিডিয়ুলের প্রয়োজন এড়ানো)।


1

আপনি এই বাস্তবায়ন আকর্ষণীয় মনে করতে পারেন । এটি একটি ওপেন সোর্স এভিআর ক্রিপ্টো-লিবারি থেকে।

আপনি কিছু সাধারণ (পুরানো) তথ্য এবং কোড আকার এবং কর্মক্ষমতা সম্পর্কে পরিসংখ্যান জানতে পারেন এখানে

হবে AES:

AES তথ্য

আমি কেবল এই লিবা থেকে SHA-1 উত্সের সাথে ঘুরেছি, তাই আমি এএস-তে মন্তব্য করতে পারি না।


1

আমি টেক্সাসের বাস্তবায়ন 512 র‌্যাম এবং 8 কে ফ্ল্যাশ সহ একটি ফ্রাইস্কেল মাইক্রোকন্ট্রোলার এস 0 8 এসএইচ 8 তে এমএসপি 430 এর জন্য ব্যবহার করেছি এবং কোনও কাজ না করেই আরডুইনোতেও ব্যবহার করছি।

http://www.ti.com/lit/an/slaa547a/slaa547a.pdf

http://www.ti.com/tool/AES-128


0

সবচেয়ে ছোট এইএস 128 আমি পিআইসি সিরিজের জন্য লিখেছি 900 টি নির্দেশনা এবং 42 বাইট র‌্যামে চলতে পারে। আমি নিজে এটি পিআইসি 12 সিরিজে ব্যবহার করি তবে পিআইসি 10 এফ206 এটিও সম্ভব :-)।

কোডটি আমার সংস্থা থেকে প্রকাশ করতে পারছি না তবে PIC10-12-16 সিরিজের জন্য আমি এটি asm এ লিখেছি। এনক্রিপশনটিতে 256 বাইটের লুকিং সারণী সহ কোডের 444 বাইট লাগে, এই কোডটিতে কিছু 25 বাইটের কী লোড ফাংশনও অন্তর্ভুক্ত থাকে।

আমি সকলকে এইএস কাগজ যাচাই করে তা নিজে প্রয়োগ করার পরামর্শ দেব! বেশিরভাগ বাস্তবায়নগুলি খুব খারাপ এবং অনেকগুলি রাম এবং রোমের উপায় ব্যবহার করে।

আমি dsPIC এবং PIC24 এর জন্য AES128 বাস্তবায়ন করেছি এবং মাইক্রোচিপের লাইবের তুলনায় প্রায় 70% কম কোড স্পেস ব্যবহার করি এবং আমার কোডটিও কিছুটা দ্রুত is dsPIC এবং PIC24 বাস্তবায়ন সংখ্যা:

"এনক্রিপশনটি প্রায় 2995 চক্র নেয় 79 79.10uS @ 40 এমআইপিএস, 197.75uS @ 16 এমআইপিএস"

"ডেকেসেটআপ প্রায় 567 চক্র নেয় takes 14.20uS @ 40 এমআইপিএস, 35.43 ইউএস @ 16 এমআইপিএস"

"ডিক্রিপশনটি প্রায় 3886 চক্র নেয় 97 97.15uS @ 40 এমআইপিএস, 242.88uS @ 16 এমআইপিএস"

"মোট কোডের আকার 1050 শব্দ সহ টেবিল।"

PIC24 কোর সম্পর্কে সৌন্দর্যটি হ'ল কিছু নির্দেশাবলী 32 বিট এবং এটি ছোট AES128 বাস্তবায়ন তৈরি করার জন্য জীবনকে আরও সহজ করে তোলে, আমার কোডটি সমস্ত 32 বিট নির্দেশাবলী উপলব্ধ ব্যবহার করে এবং সম্পূর্ণভাবে 32 বিট কার্যকর হয় যাতে আমি কোডটিতে দ্রুত পোর্ট করতে পারি PIC32 বা অন্যান্য 32 বিট সিপিইউ।

কেবলমাত্র বেশিরভাগ লোকেরা চেষ্টা করে না বাস্তবায়নের জন্য এইএস খুব সহজ।

লিঙ্কটি দেখুন: http://www.cs.bc.edu/~straubin/cs381-05/ blockciphers/ rijndael_ingles2004.swf


এটি কি ওপেন সোর্স? আপনি কোড পোস্ট করতে পারেন?
টবি জাফি

2
@ পল - বৈদ্যুতিক ইঞ্জিনিয়ারিংয়ে আপনাকে স্বাগতম! আপনার উত্তর আকর্ষণীয় এবং উত্সাহজনক, তবে এটি আরও বিশদ ছাড়াই সত্যই কার্যকর নয়। 900 নির্দেশাবলী সম্ভবত একটি ব্লক ফিট করতে পারে! এটির উন্নতি করতে দয়া করে উত্তরের নীচে "সম্পাদনা" লিঙ্কটি দেখুন।
কেভিন ভার্মির

@ পলহোল্যান্ড দুর্দান্ত খবর, কোডটি কোথায়?
ফ্রাঙ্ক

2
@ পল - আপনি বর্তমানে যে ডাউনটাতে আছেন তার পরিবর্তে আপনি উর্ধ্বতনগুলির একটি স্তূপ পেয়ে যাবেন যদি আপনি ব্যাখ্যা করেন যে আপনি কীভাবে এটি লিখেছেন এবং কোডটি পোস্ট করেছেন! যদি আপনি লাইসেন্সের কারণে কোডটি পোস্ট করতে না পারেন তবে কমপক্ষে ব্যাখ্যা করুন যে আপনি কীভাবে এটি লিখেছিলেন এবং কীভাবে জবি আপনার কাজের সমান্তরাল করতে পারে।
কেভিন ভার্মির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.