• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:組み込みC言語 AES 暗号・復号化の利用)

組み込みC言語 AES 暗号・復号化の利用

このQ&Aのポイント
  • マイコンでのAES128等の暗号・復号化処理についてご教示ください。
  • マイコンがハードウェアとして暗号・復号化の機能を持っている場合、それを利用するのが一般的です。
  • ファーム側の対応を要求された場合は、有料のライブラリやフリーのソースコードを利用することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • masatsan
  • ベストアンサー率15% (179/1159)
回答No.1

もちろんハードでサポートしているものを使うのが心配ないでしょう。(自分の書いたソフトにバグがあるかどうかなんてなかなかわからないからずっと心配していなければならない) APIの使い方を理解する能力は必要です。 またセキュリティーが目的ですから、使えば良いというようなものではないことも理解しなければなりません。 マイコン用というソースがあるかどうかは調べたことはありませんが、Cのソースコードは手に入ります。(ライブラリーも)しかしそれをマイコン用に移植するのは、たとえばAESの原理を勉強するとかしないと、まず移植はできません。

nanashi_00
質問者

お礼

早速のご回答有難うございます。 やはり一概にサンプルコードがあるからといって 簡単に「移植する・出来る」なんて甘い考えは 品質をさげる要因になりますね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • openSSLのAES暗号化アルゴリズム関数仕様 (C言語開発)

    openSSLのAES暗号化アルゴリズムを使用して、暗号化と復号化の処理 をC言語で作成したいのですが、関数の仕様書を見つけることができません。 尚、openSSLの公式Pageにも載ってませんでした><; 関数仕様書を入手できるHP、或いは書籍(有料でも良いです)などございましたら、 ご教授の程、お願い致します。

  • AES暗号方式について

    AES暗号化方式では,秘密鍵(共通鍵)を用いてランダムに生成したセッション鍵で暗号化し,さらにそのセッション鍵を暗号化する. 復号化する場合は,逆の手順で平文に戻す と認識しています. これを踏まえて以下の質問に回答いただけると幸いです. 1.上の認識は間違っていないでしょうか? 2.暗号文を復号するには,暗号化時に生成したセッション鍵の値と秘密鍵が必要であると言えますか? 3.秘密鍵が漏れなければセッション鍵が漏れても問題ありませんか? 以上,3点についてご教授いただけると幸いです. よろしくお願いします.

  • 公開鍵暗号方式の復号に関して質問します。

    暗号方式は、発信者Aさんが正当な受信者Bさんに暗号化した電文を送付し、途中で不正に傍受したCさんには電文の復号ができず、正当な受信者Bさんには復号ができるという考えかたです。 正当なる受信者Bさんには復号が可能で、不正なる傍受者Cさんには復号が不可能であるためには、BさんとCさんの間に情報格差を維持しないと駄目だと思うのですが、公開鍵方式の場合に正当なる受信者Bさんと不正な傍受者Cさんの間にどのような情報格差が存在するのでしょうか。 === RSA暗号の例題を考えます === A:暗号の発信者 B:正当なる暗号の受信者 C:不正なる暗号傍受者 Aさんは 素数P=3 素数Q=11 を選んで、 33を法とする世界(Mod33)を利用します。 Aさんは原文を3乗し、Mod33を取った暗号文をBさんに送付しますが、ここで、公開鍵情報として、「33を法とする」および「3乗した」という二つの情報を開示して暗号を送付します。 暗号を不正に傍受したCさんは、33の素因数分解ができないために、P=3、Q=11という二つの素数を特定できず、3xD={nx(p-1}X(Q-1)+1}において、N=1の場合でもP,Qが分からないので、復号することがきません。 ところが正当なる受信者Bさんは、3xD=1x(3-1)x(11-1)+1=21より、D=7を求め、受診した暗号を7乗することで受信電文の復号が可能となります。  ==== 以上例題おわり ==== 不正なる傍受者Cさんは素因数分解が困難であることから二つの素数P、Qの特定ができずに復号ができないことは良く理解できます。 しかし、正当なる受信者Bさんは、なぜP,Qを特定し、D=7を求めることが出来るのでしょうか。 質問1:なぜBさんだけが復号可能なのでしょうか? 質問2:Bさんは素因数分解をせずとも、P=3、Q=11という二つの素数を知ることができるのでしょうか? 質問3:素数P、Qの値を特定できなくてもD=7を知ることができるのでしょうか? 公開鍵暗号方式の根本原理が分かっていないと思われるので、公開鍵暗号方式、あるいはRSA暗号方式の考え方をご存じの方ご教示いただけると助かります。

  • Java(AES)多重の暗号化・復号化、安全?

    メンタル・ポーカー・アルゴリズム↓をJavaで実装したくて http://en.wikipedia.org/wiki/Mental_poker まず、暗号化について調べました。 AESという暗号化の方法を使ってみたのですが、 これなら、多重に暗号化したとして、順番に関わらず、 復号化できるようなので、メンタル・ポーカー・アルゴリズムが実装できると思いました。 しかしながら、私はこのAESという暗号化の方法について、詳しく知りません。 この暗号化方法は、安全なのでしょうか。たとえば、カギがなくとも、暗号前のデータの見当がつく かのようなことが、スーパーコンピュータの手にかかれば一時間もあれば分かってしまう、 というようなことはないでしょうか。 下記は、ランダムな順番で暗号化・復号化してみたコードです↓ 参考になればと思い乗せてみます static void shuffle(int[] array) { for (int i = 1; i < array.length; i++) { int n = random.nextInt(i + 1); int t = array[i]; array[i] = array[n]; array[n] = t; } } public void testAES() throws Exception { String alg = "AES"; byte[] orgData = "abcdefghhijklmno".getBytes(); KeyGenerator keygen = KeyGenerator.getInstance(alg); int keyCount = 16; Key[] keys = new Key[keyCount]; int[] encryptOrder = new int[keyCount]; int[] decryptOrder = new int[keyCount]; for (int i = 0; i < keyCount; i++) { keys[i] = keygen.generateKey(); encryptOrder[i] = i; decryptOrder[i] = i; } shuffle(encryptOrder); shuffle(decryptOrder); byte[][] ivs = new byte[keyCount][]; Cipher cipher = Cipher.getInstance(alg + "/OFB/NoPadding"); byte[] data = orgData.clone(); for (int i = 0; i < keyCount; i++) { int idx = encryptOrder[i]; cipher.init(Cipher.ENCRYPT_MODE, keys[idx]); ivs[idx] = cipher.getIV(); data = cipher.doFinal(data.clone()); } for (int i = 0; i < keyCount; i++) { int idx = decryptOrder[i]; cipher.init(Cipher.DECRYPT_MODE, keys[idx], new IvParameterSpec(ivs[idx])); data = cipher.doFinal(data); } assertTrue(new String(data), Arrays.equals(orgData, data)); }

    • ベストアンサー
    • Java
  • AES256ビット暗号について

    AES256ビットに暗号化したデータを復号するのは可能ですか? また可能な場合はどれくらいの時間がかかりますか? PWは設定できるのなら50桁くらい PCのスペックは回答者様で最高の性能だと思うものか、 Windows 10 Pro 64bit Intel(R) Xeon(R) E5-2620v4 (2.10GHz/3.00GH,20M,8Core, 16Thread) x2基 NVIDIA Quadro P600 2GB (4画面対応/Mini DisplayPort ×4) 32GB (DDR4-2400 ECC RDIMM, 8GB x4) 480GB SSD (2.5インチ SATA3) Intel(R) C612 チップセット レベルのものでお願いいたしますm(__)m 当方PCに関する知識がそこまでないためできる限り簡単に書いていただけるとありがたいです。

  • 無線lan機器の仕様についての疑問

    質問ですが、wpa対応(wpa2には非対応)の機器でaesの暗号化に対応した物が在ります。 しかし、いくつかのサイトで調べるとaesはwpa2から実装された物とあるのですが、どういう事なのでしょうか?

  • 「Crypto API」について

    初めて質問させて頂きます。 質問したいことはCrypto APIのCSP(CryptoGraphy Service Provider、環境XPSP3)と次世代暗号のCNG(Cryptography Next Genaration、環境はWin7)の互換性についてです。 (1)CryptoAPIのCryptCreateHash関数でメッセージをSHA_256にし、AES_256のセッション鍵を作成した暗号文をCNGで復号することはできますか? (2)上記の逆(CNGでSHA_256→AES_256で暗号化)した場合、CSPで復号できますか? 出来る場合は必要な関数を、できなければ他の解決方法を教えて頂きたいです。 よろしくお願いします。

  • 組込みC開発

    お世話になります。 組込みでARMコアのCPUをチョイスしての仕事を任されました。 開発ツールはKeilというIDEで、C言語でOS使用しないで開発をしています。 C言語はかれこれ2年以上使用しており、文法上の事などはほぼマスター しており、上記のIDEでソースをコンパイルしてコンパイルエラーもなく 60kbytesほどのコードが生成されます。 ただ、このプログラムをターゲットCPUへダウンロードして使うと コードとは異なる動きをするときがあります。 これは、小規模なプログラムでは経験したことの無いことです。 たとえば、思った動きにならないときに、ソースを少しいじっただけで 今度は例外が発生して止まったりします。 割込みは内部タイマー、外部(ボタン等)、UARTなど計4種類を 設定していますが、どうもこのあたりが怪しいと考えています。 たとえばUARTでPCからデータを送って、ボタンを押す、などの アクションを起こすと、データアボートやプリフェッチアボート が発生したりしますので。 ちなみに、割込み処理は、IDEがサンプルソースでつけているものを includeして使っています。 また、CでのプログラムでMISRA-C参考書も購入してチェックして おります。 大規模なプログラミングは今回が初めてなのですが、こうもソース を少しさわっただけで、例外が発生したりする(コード上問題ない と考えています)ので、現状は記述の仕方を変えてみたりして 対応しています。 こうした規模の大きい組込み系でのプログラミングで、注意する点 や、常識的な部分があればお教えいただきたく思います。 よろしくお願いいたします。

  • 公開鍵暗号方式を利用した下りデータの安全性について

    公開鍵暗号方式については、  ・公開鍵で暗号化したものは秘密鍵で復号できる  ・秘密鍵で暗号化したものは公開鍵で復号できる  ・秘密鍵は(もちろん)秘密だが、公開鍵は不特定多数に配布可能 が前提にあると理解しています。 SSLも公開鍵暗号方式を利用した通信プロトコルということですが、ここで、一つの疑問が湧きました。 信頼できるルートから署名された証明書を持つサイトで、SSLによって通信が暗号化される会員登録画面があったとします。 利用者は、氏名や住所などを登録画面に入力し、登録ボタンを押します。 この時、入力した情報は、サイトの証明書から入手した公開鍵で暗号化され、サイトに送信されるのだと思います。 ここで暗号化された情報は、サイトが持つ秘密鍵のみで復号可能ですので、鍵を持たない第三者が盗聴すること自体が無意味であり、安全であると言えます。 では、登録された情報を、利用者が確認のために表示する場合はどうなのでしょう? 今度は、サイトが持つ秘密鍵で利用者の情報を暗号化し、サイトの公開鍵によって利用者側で復号することになると思います。 しかし、前述したように、そのサイトの公開鍵は不特定多数の人が持っている可能性があります。 ということは、下りデータの通信を盗聴することで、同じ公開鍵を持つ第三者に復号されてしまうのではないかと考えたのですが、実際はどうなのでしょうか? 利用者が個人で秘密鍵を持っていない状況での通信というのがポイントです。 インターネットなどで調べてみたのですが、秘密鍵の所有者向きの通信を公開鍵によって安全に暗号化することを例とした説明が多く、先の疑問に対する明確な解答を見つけることが出来ませんでした。 また、ランダムに生成した共通鍵を公開鍵で暗号化するハイブリッド方式というものがあり、何か関連があるかと思ったのですが、公開鍵暗号方式のデメリットである処理速度の問題を補う手法という内容で、解決には結び付きませんでした。 ご存知の方がいらっしゃいましたらお教え下い。 宜しくお願いします。

  • ELECOM USBフラッシュメモリーについて

    ELECOM MF-AU2B04GWHを使用しています。 PASS×AES(エレコム提供の暗号化ソフト)を使用していて、暗号化の際にWindows側からアプリケーションエラーが出てしまい、暗号化処理をする前に、強制的にアプリケーションが閉じられてしまいました。 PCを再起動し、USBメモリを挿し復号化しようとすると、「復号化できません」というメッセージが出てきます。 他のPCで同じ作業をしても、まったく同じエラーが返ってきます。 中に入っているデータのバックアップがあればフォーマットしてもいいのですが、バックアップをまだ取っていなく困っています。 これは諦めるしかないのでしょうか? 回答よろしくお願いします。

このQ&Aのポイント
  • コピーすると用紙に書いていない文字が印刷される。用紙の下に「上へ↑」と印刷され困っています。
  • ブラザーのMFC-L3770CDWでコピーすると用紙に書いていない文字が印刷され、用紙の下に「上へ↑」と印刷されます。この問題についてどうすれば解決できるでしょうか。
  • ブラザーのMFC-L3770CDWでコピーすると、用紙に書いていない文字が印刷されるトラブルが発生しています。具体的には、用紙の下に「上へ↑」という文字が印刷されます。この問題の解決方法を教えてください。
回答を見る

専門家に質問してみよう