目次

last update: 2025/03

embOS RTOS + 各種ミドルウェアサンプル
第10章: セキュリティ機能の評価
評価ボード:AP-RX72N-0A




emSecure:不正改造・不正量産を防ぐセキュリティゲートウェイ

テストサンプル

Demo Sample Application Folder:

Application
 └ _Exclude
     ├ SECURE  ....... emSecureライブラリのデモサンプル
Sample説明
SECURE_RSA_Bench_PerformanceRSA鍵のデジタル署名を使用してメッセージのSign・Verifyパフォーマンスを確認します

関連設定ファイル(emSecure):

Config
 |- SECURE_ECDSA_Conf.h  ....... ECDSAライブラリのコンフィグレーション設定
 |- SECURE_RSA_Conf.h  ......... RSAライブラリのコンフィグレーション設定
 |- Keys       ................. テスト用鍵データ設定ファイル
     |- SECURE_ECDSA_xxxx.h
     |- SECURE_RSA_xxxx.h

emSecure:ビルド・動作確認方法

プロジェクト設定では「\Application\_Exclude\SECURE」フォルダはビルド対象外に設定しています。以下のどちらかの方法で動作確認を行うサンプルアプリケーションを選択します。

  1. 「SECURE_RSA_Bench_Performance.c」テストサンプルファイルをビルド対象設定の「\Application」フォルダ下にコピーします。
  2. 「SECURE_RSA_Bench_Performance.c」テストサンプルファイルの「ビルド対象外」設定を解除します。

プロジェクトを再ビルドし、評価ボードに接続してデバッグセッションを開始します。
デバッガのIOコンソールのログ画面から結果を確認します。

テストレポート(emSecure)

Sample: SECURE_RSA_Bench_Performance

Debug IO Console:

SEGGER Software Evaluation Sample
Eval Board: AP-RX72N-0A (RX72N RXv3 @240MHz)
RTOS: SEGGER embOS
------------------------------------------------
emSecure-RSA Performance Benchmark compiled Feb 14 2025 15:14:38

Compiler: CC-RX V3.06.00
System:   Processor speed             = 240.000 MHz
Config:   CRYPTO_VERSION              = 24001 [2.40a]
Config:   SECURE_RSA_VERSION          = 24600 [2.46]
Config:   CRYPTO_MPI_BITS_PER_LIMB    = 32
Config:   SECURE_RSA_MAX_KEY_LENGTH   = 2048 bits
Config:   SECURE_RSA_HASH_FUNCTION    = SHA1
Config:   SECURE_RSA_SIGNATURE_SCHEME = PSS

Sign/Verify Performance
=======================

+----------+----------+----------+----------+
|  Modulus |  Message |     Sign |   Verify |
|    /bits |   /bytes |      /ms |      /ms |
+----------+----------+----------+----------+
|      512 |        0 |    10.81 |     0.74 |
|      512 |     1024 |    10.95 |     0.92 |
|      512 |   102400 |    27.81 |    17.79 |
+----------+----------+----------+----------+
|     1024 |        0 |    57.73 |     2.08 |
|     1024 |     1024 |    57.87 |     2.26 |
|     1024 |   102400 |    74.70 |    19.14 |
+----------+----------+----------+----------+
|     2048 |        0 |   366.40 |     7.83 |
|     2048 |     1024 |   365.89 |     7.99 |
|     2048 |   102400 |   382.94 |    24.84 |
+----------+----------+----------+----------+

Benchmark complete

STOP.

emSSL:SSL/TLSセキュア通信

テストサンプル

SSL Application Folder:

Application
 └ _Exclude
     ├ SSL  ....... emSSLライブラリのデモサンプル
Sample説明
SSL_OS_Scan指定WEBサーバー対応の暗号スイートをスキャンして結果を表示します
SSL_OS_SimpleWebClientSSLクライアントから指定WEBサーバーに接続します
SSL_OS_SimpleWebServer簡単なセキュアWEBサーバー(HTTPS)を実装します

関連設定ファイル(emSSL):

Config
 |- SSL_Conf.h  ........ SSLコンフィグレーション設定ファイル(マクロ定義)
 |- IO
 |   |- SSL_ConfigIO.c  ..... デバッグコンソールIOインターフェース設定ファイル
 |
 |- Certificates
 |   |- SSL_EC_Certificate.c  ......... テスト用証明書
 |   |- SSL_EC_PrivateKey.c  .......... テスト用EC秘密鍵
 |   |- SSL_RSA_Certificate.c  ........ テスト用証明書
 |   |- SSL_RSA_PrivateKey.c  ......... テスト用RSA秘密鍵
 |
 |- OS
     |- lib_embOSLayer_RXv3_L.lib  ..... OSインターフェース設定ファイル

BSP
 |- Setup
     |- SSL_X_Config.c  .......... SSLコンフィグレーション設定ファイル(初期化設定)
     |- SSL_X_TrustedCerts.c  .... テスト用ルート証明書データ(バイナリ)

emSSL:ビルド・動作確認方法

プロジェクト設定では「\Application\_Exclude\SSL」フォルダはビルド対象外に設定しています。以下のどちらかの方法で動作確認を行うサンプルアプリケーションを選択します。

  1. 「\_Exclude\SSL」フォルダ下の対象テストサンプルファイルをビルド対象設定の「\Application」フォルダ下にコピーします。
  2. 「\_Exclude\SSL」フォルダ下の対象テストサンプルファイルのみ「ビルド対象外」の設定を解除します。

プロジェクトを再ビルドし、評価ボードに接続してデバッグセッションを開始します。
デバッガのIOコンソールのログ画面から結果を確認します。

テストレポート(emSSL)

Sample: SSL_OS_Scan

「www.google.co.jp」サイトをスキャンして対応CIPHERリストを表示します。

File: SSL_OS_Scan.c (サーバーIPアドレス設定)

#define HOST         "www.google.co.jp"
#define PORT         443

Debug IO Console:

3:026 IP_Task - DHCPc: Sending Request.
3:035 IP_Task - DHCPc: IFace 0: Using IP: 192.168.1.18, Mask: 255.255.255.0, GW: 192.168.1.1.
3:061 ScanTask - Scanning cipher suites on www.google.co.jp:443
3:105 ScanTask - C008  TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA         Received Handshake Failure alert
3:384 ScanTask - C009  TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA          TLS 1.2   200 ms processing,    78 ms socket,   278 ms total
3:394 ScanTask - C023  TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256       Received Handshake Failure alert
3:408 ScanTask - C0AC  TLS_ECDHE_ECDSA_WITH_AES_128_CCM              Received Handshake Failure alert
3:421 ScanTask - C0AE  TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8            Received Handshake Failure alert
3:701 ScanTask - C02B  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256       TLS 1.2   200 ms processing,    79 ms socket,   279 ms total
3:976 ScanTask - C00A  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA          TLS 1.2   201 ms processing,    72 ms socket,   273 ms total
3:985 ScanTask - C024  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384       Received Handshake Failure alert
3:996 ScanTask - C0AD  TLS_ECDHE_ECDSA_WITH_AES_256_CCM              Received Handshake Failure alert
4:007 ScanTask - C0AF  TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8            Received Handshake Failure alert
4:282 ScanTask - C02C  TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384       TLS 1.2   200 ms processing,    74 ms socket,   274 ms total
4:293 ScanTask - C048  TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256      Received Handshake Failure alert
4:304 ScanTask - C05C  TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256      Received Handshake Failure alert
4:315 ScanTask - C049  TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384      Received Handshake Failure alert
4:328 ScanTask - C05D  TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384      Received Handshake Failure alert
4:344 ScanTask - C072  TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256  Received Handshake Failure alert
4:356 ScanTask - C086  TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256  Received Handshake Failure alert
4:369 ScanTask - C073  TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384  Received Handshake Failure alert
4:380 ScanTask - C087  TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384  Received Handshake Failure alert
4:391 ScanTask - C007  TLS_ECDHE_ECDSA_WITH_RC4_128_SHA              Received Handshake Failure alert
4:661 ScanTask - CCA9  TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS 1.2   199 ms processing,    70 ms socket,   269 ms total
4:670 ScanTask - C012  TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA           Received Handshake Failure alert
4:890 ScanTask - C013  TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA            TLS 1.2   144 ms processing,    75 ms socket,   219 ms total
4:902 ScanTask - C027  TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256         Received Handshake Failure alert
5:126 ScanTask - C02F  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256         TLS 1.2   142 ms processing,    80 ms socket,   222 ms total
5:344 ScanTask - C014  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA            TLS 1.2   143 ms processing,    74 ms socket,   217 ms total
5:359 ScanTask - C028  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384         Received Handshake Failure alert
5:588 ScanTask - C030  TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384         TLS 1.2   144 ms processing,    83 ms socket,   227 ms total
5:608 ScanTask - C04C  TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256        Received Handshake Failure alert
5:625 ScanTask - C060  TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256        Received Handshake Failure alert
5:635 ScanTask - C04D  TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384        Received Handshake Failure alert
5:646 ScanTask - C061  TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384        Received Handshake Failure alert
5:657 ScanTask - C076  TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256    Received Handshake Failure alert
5:672 ScanTask - C08A  TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256    Received Handshake Failure alert
5:687 ScanTask - C077  TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384    Received Handshake Failure alert
5:702 ScanTask - C08B  TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384    Received Handshake Failure alert
5:716 ScanTask - C011  TLS_ECDHE_RSA_WITH_RC4_128_SHA                Received Handshake Failure alert
5:936 ScanTask - CCA8  TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256   TLS 1.2   143 ms processing,    76 ms socket,   219 ms total
5:946 ScanTask - C002  TLS_ECDH_ECDSA_WITH_RC4_128_SHA               Received Handshake Failure alert
5:958 ScanTask - C003  TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA          Received Handshake Failure alert
5:973 ScanTask - C004  TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA           Received Handshake Failure alert
5:988 ScanTask - C025  TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256        Received Handshake Failure alert
5:999 ScanTask - C02D  TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256        Received Handshake Failure alert
6:011 ScanTask - C005  TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA           Received Handshake Failure alert
6:023 ScanTask - C026  TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384        Received Handshake Failure alert
6:037 ScanTask - C02E  TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384        Received Handshake Failure alert
6:049 ScanTask - C04A  TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256       Received Handshake Failure alert
6:060 ScanTask - C05E  TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256       Received Handshake Failure alert
6:072 ScanTask - C04B  TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384       Received Handshake Failure alert
6:086 ScanTask - C05F  TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384       Received Handshake Failure alert
6:098 ScanTask - C074  TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256   Received Handshake Failure alert
6:110 ScanTask - C088  TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256   Received Handshake Failure alert
6:122 ScanTask - C075  TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384   Received Handshake Failure alert
6:136 ScanTask - C089  TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384   Received Handshake Failure alert
6:146 ScanTask - C00D  TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA            Received Handshake Failure alert
6:157 ScanTask - C00E  TLS_ECDH_RSA_WITH_AES_128_CBC_SHA             Received Handshake Failure alert
6:170 ScanTask - C029  TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256          Received Handshake Failure alert
6:186 ScanTask - C031  TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256          Received Handshake Failure alert
6:200 ScanTask - C00F  TLS_ECDH_RSA_WITH_AES_256_CBC_SHA             Received Handshake Failure alert
6:212 ScanTask - C02A  TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384          Received Handshake Failure alert
6:224 ScanTask - C032  TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384          Received Handshake Failure alert
6:236 ScanTask - C04E  TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256         Received Handshake Failure alert
6:247 ScanTask - C062  TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256         Received Handshake Failure alert
6:261 ScanTask - C04F  TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384         Received Handshake Failure alert
6:272 ScanTask - C063  TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384         Received Handshake Failure alert
6:284 ScanTask - C078  TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256     Received Handshake Failure alert
6:296 ScanTask - C08C  TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256     Received Handshake Failure alert
6:310 ScanTask - C079  TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384     Received Handshake Failure alert
6:323 ScanTask - C08D  TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384     Received Handshake Failure alert
6:338 ScanTask - C00C  TLS_ECDH_RSA_WITH_RC4_128_SHA                 Received Handshake Failure alert
6:465 ScanTask - 000A  TLS_RSA_WITH_3DES_EDE_CBC_SHA                 TLS 1.2    49 ms processing,    77 ms socket,   126 ms total
6:477 ScanTask - 0096  TLS_RSA_WITH_SEED_CBC_SHA                     Received Handshake Failure alert
6:599 ScanTask - 002F  TLS_RSA_WITH_AES_128_CBC_SHA                  TLS 1.2    49 ms processing,    72 ms socket,   121 ms total
6:615 ScanTask - 003C  TLS_RSA_WITH_AES_128_CBC_SHA256               Received Handshake Failure alert
6:628 ScanTask - C09C  TLS_RSA_WITH_AES_128_CCM                      Received Handshake Failure alert
6:756 ScanTask - 009C  TLS_RSA_WITH_AES_128_GCM_SHA256               TLS 1.2    49 ms processing,    78 ms socket,   127 ms total
6:882 ScanTask - 0035  TLS_RSA_WITH_AES_256_CBC_SHA                  TLS 1.2    51 ms processing,    74 ms socket,   125 ms total
6:892 ScanTask - 003D  TLS_RSA_WITH_AES_256_CBC_SHA256               Received Handshake Failure alert
6:908 ScanTask - C09D  TLS_RSA_WITH_AES_256_CCM                      Received Handshake Failure alert
7:039 ScanTask - 009D  TLS_RSA_WITH_AES_256_GCM_SHA384               TLS 1.2    51 ms processing,    78 ms socket,   129 ms total
7:048 ScanTask - 0041  TLS_RSA_WITH_CAMELLIA_128_CBC_SHA             Received Handshake Failure alert
7:058 ScanTask - 0084  TLS_RSA_WITH_CAMELLIA_256_CBC_SHA             Received Handshake Failure alert
7:067 ScanTask - 00BA  TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256          Received Handshake Failure alert
7:076 ScanTask - 00C0  TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256          Received Handshake Failure alert
7:088 ScanTask - C07A  TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256          Received Handshake Failure alert
7:100 ScanTask - C07B  TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384          Received Handshake Failure alert
7:110 ScanTask - C03C  TLS_RSA_WITH_ARIA_128_CBC_SHA256              Received Handshake Failure alert
7:120 ScanTask - C03D  TLS_RSA_WITH_ARIA_256_CBC_SHA384              Received Handshake Failure alert
7:132 ScanTask - C050  TLS_RSA_WITH_ARIA_128_GCM_SHA256              Received Handshake Failure alert
7:142 ScanTask - C051  TLS_RSA_WITH_ARIA_256_GCM_SHA384              Received Handshake Failure alert
7:152 ScanTask - 0004  TLS_RSA_WITH_RC4_128_MD5                      Received Handshake Failure alert
7:167 ScanTask - 0005  TLS_RSA_WITH_RC4_128_SHA                      Received Handshake Failure alert
7:169 ScanTask - 
15 common cipher suites out of 92 tested

Sample: SSL_OS_SimpleWebClient

「https://www.segger.com/emssl-testpage.php」ページにアクセスしてコンテンツをログコンソールに表示します。

Debug IO Console:

2:034 IP_Task - DHCPc: IFace 0: Using IP: 192.168.1.18, Mask: 255.255.255.0, GW: 192.168.1.1.
3:278 ClientTask - Data: HTTP/1.1 200 OK..Content-Type: text/html; charset=UTF-8..Connection: close..date: Fri, 14 Feb 2025 06:37:19 GMT..server: Apache..vary: Accept-Encoding..x-xss-protection: 1; mode=block..x-content-type-options: nosniff..x-ua-compatible: IE=edge..strict-tran
3:279 ClientTask - Data: sport-security: max-age=31536000; includeSubDomains; preload;..X-Cache: Miss from cloudfront..Via: 1.1 1b226d41bb3b440fb6606e8a954c03f4.cloudfront.net (CloudFront)..X-Amz-Cf-Pop: NRT12-C3..X-Amz-Cf-Id: DpniHZXIOVoK0ccaCcqAP8rVKM6PS6_lA1UxT_Zi9mjFDhMdKBetk
3:280 ClientTask - Data: w==....Welcome to www.segger.com/emssl-testpage.php!...Successfully connected via SSL...Current date is 2025-02-14...Current time is 07:37:19..
3:282 ClientTask - Data received, socket closed: done

Sample: SSL_OS_SimpleWebServer

Debug IO Console:

2:134 IP_Task - DHCPc: IFace 0: Using IP: 192.168.1.18, Mask: 255.255.255.0, GW: 192.168.1.1.
2:164 WebServerTask - Awaiting connection
55:595 WebServerTask - Connection made, attempting to upgrade to secure
55:766 WebServerTask - Session is now secured, cipher suite follows
55:767 WebServerTask - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
55:781 WebServerTask - Session closed
55:781 WebServerTask - Awaiting connection

PC WebServer: https://192.168.1.18

emSSL WebServer

emSSH:SSH セキュアログイン

テストサンプル

SSH(Server) Application Folder: → \Application\_Exclude\SSH

Application
 └ _Exclude
     ├ SSH  ....... emSSHライブラリのデモサンプル
Sample説明
SSH_SCP_FS_ServerSSH SCPサーバーのデモサンプル(ファイルシステムが必要です)
SSH_Shell1SSHサーバー実装方法を示す簡単なサンプル(入力文字データをECHOします)
SSH_Shell6複数クライアント接続をサポートするSSHサーバーの実装事例

関連設定ファイル(emSSH):

Config
 |- SSH_Conf.h  ........ SSHコンフィグレーション設定ファイル(マクロ定義)
 |- SSH_X_Config.c  .... SSHコンフィグレーション設定ファイル(初期化設定)
 |- IO
 |   |- SSH_ConfigIO.c  ..... デバッグコンソールIOインターフェース設定ファイル
 |
 |- OS
 |   |- lib_embOSLayer_RXv3_L.lib  ..... OSインターフェース設定ファイル
 |
 |- Keys   .................. テスト用鍵データ設定ファイル
     |- SSH_ServerKeys_DSA.c
     |- SSH_ServerKeys_ECDSA.c
     |- SSH_ServerKeys_EdDSA.c
     |- SSH_ServerKeys_RSA.c

emSSH:ビルド・動作確認方法

プロジェクト設定では「\Application\_Exclude\SSH」フォルダはビルド対象外に設定しています。以下のどちらかの方法で動作確認を行うサンプルアプリケーションを選択します。

  1. 「\_Exclude\SSH」フォルダ下の対象テストサンプルファイルをビルド対象設定の「\Application」フォルダ下にコピーします。
  2. 「\_Exclude\SSH」フォルダ下の対象テストサンプルファイルのみ「ビルド対象外」の設定を解除します。

プロジェクトを再ビルドし、評価ボードに接続してデバッグセッションを開始します。
デバッガのIOコンソールのログ画面から結果を確認します。

テスト環境の設定:

評価ボードのLANポートをテスト用パソコンに接続して、TCP/IPネットワーク通信が正常にできることを確認してください。

PC Setup

テストレポート(emSSH)

Sample: SSH_Shell1 (Echo Test)

ボード側にセキュアTELNETサーバーと起動して、テストPCのTELNETクライエントアプリケーション(TeraTermなど)から接続及びアクセスを確認します。

PC TeraTerm SSH Client (User name: anon / Password: 無し):

emSSH Client TeraTerm

Windows MS-DOSプロンプトからの確認の場合:

emSSH Client Cmdline

Debug IO Console:

emSSH V2.54 - Shell1 compiled Feb 14 2025 15:50:25
Copyright (c) 2015-2021 SEGGER Microcontroller GmbH    www.segger.com
前の章

圧縮・解凍機能のデモサンプル

次の章

暗号・サイファーライブラリ