情報家電開発必勝法 その2

今日の情報家電開発はスピードが必須です。他社が2世代、3世代と商品の進化をかさねる間にやっと第一世代の商品を出すようなことでは商品力に劣ってしまいます。
また、開発費をさげなければ結果として商品の値段をさげることもできません。
開発期間、開発費の殆どをしめるのはソフトウェア開発なので、ソフトウェアを早く安くつくれば商品力があがる、というお話を前回してから2週間たってしまいました。どうもごめんなさい。

で、ソフトウエアはどうすれば早く安くつくれるのでしょうか。ちょっと禅問答のような回答になりますが、つくらなければいいのです。つまり再利用です。
10年前と違い今日では sourceforge, github, google code といった OSS ホスティングサービスが多々あるので、なにかソフトウエアを作るまえにまず再利用できるソフトウエアをさがしてみると大概みつかることのほうが多いのではないでしょうか。
もちろん、再利用には特有の難しさがあり、ソフトウェア工学の歴史はある意味、再利用の方法論の進化の歴史だったような部分があるのも事実です。そういった話しの詳細はまた後日。
また OSS の再利用についてはとくに、そのOSS が自分のプロジェクトの requireement をどこまでみたしているのかをどうやって評価すればいいのか?といった実務的な難しさもあります。こちらも後日、詳細をご紹介いたします。

さて、再利用で大成功している例が Android です。Androidソースコードをみるとおよそ250 ほど(2.2 当時)の独立したプロジェクトの集合体なのですが、その多くが OSS プロジェクトの再利用です。Linux kernek (これだけで約35,000ファイルからなります)はもちろん、AES, Bluetooth, ICU, EXIF, WPA といった基本機能、さらに開発期間 GSM Telephony, MTP 転送 といった「そんなもんがOSSであったんだ!」と私も率直にびっくりしたようなものまで多岐にわたって再利用されています。これらをインハウスでつくった場合と比較して、節約できた期間とコストは膨大なものと思われます。だからこそ、唐突ともおもえるまでの短期間で、しかも無料で提供することさえ可能なプラットフォームを作ることができたのでしょう。

これまでの家電メーカーのソフトウェア工学の取り組みは新規に「作るための」ソフトウェア工学ばかりだったのではないでしょうか。ソフトウエアの部隊が「作らない」ための技術に取り組むことは、歯医者さんが完全な虫歯予防飲み薬を開発してしまうのと同じぐらい自分の居場所を危険にしてしまう行為なので、事情もわかります。しかし、メーカー自体が生き残りをかけてグローバルに競争している今日、既存ソフトウエアの再利用のための工学的手法への取り組みは、もう避けてはいられない状況なのではないでしょうか。

再利用のための工学的手法についてまた詳細を後日、ご説明いたします。

今日もヨタばなしでしたので仕様の参照はありません。

情報家電製品を他社より早く安く開発するための必勝法

これは実は簡単なことなのですが多くの方が誤解されているとおもいましたので今回ちょっとかいてみます。正解はソフトウェアを早く(そして必然的に)安く開発すれば良いだけです。ちょっとコペルニクス的転回とかんじられるかもしれませんがデジタルな世界では家電製品の開発とはとはソフトウェア開発であると考えて多くの場合で的をはずしません。

降ってきた放送はソフトウェアで絵と音とその他データに分解され、音と絵はさらにデコードされて同期をとって出力されます。高速化および省電力化のために専用チップを使うことが一般的ですが、そのチップの中でソフトウェアがうごいているのはもちろんとしてそのチップを製品として制御しているのはデバイスドライバミドルウェアといったソフトウェアです。電話のベースバンドや呼制御こちらもソフトウェアですね。

上で「多くの場合」と言いましたが、開発を見積もる場合もこれにふくまれます。
まず、家電製品の開発コスト(製造コストではないです)、現代の情報家電ではテレビでも携帯電話でも最終製品の開発費の9割前後はソフトウェア開発がしめることが経験的に知られています。凝った機能を目指す高級機ほどその比率はさらに高くなり、廉価機だと低くなりますが、だいたい9割前後に分布するようです。つまり、情報家電製品の開発費見積りは、ソフトウェア開発費で見積もっておけば良い近似になります。
系として、開発費の9割以上が人件費なので、必開発人員の頭数見積りもソフトウェア開発用員数を見積もっておけば良い近似になります。

さらに開発期間も、ソフトウェア開発が全体線票のドライバーになるのはもはや説明も不要と思います。ソフトウェアのせいで出荷がよくおくれることは存知でしょう。

家電メーカーが競争に勝ち残って行く為に、安い製品を早く市場に投入して行くために最も重要な技術は何だとおもわれますか?ディスプレイデバイスや通信の技術がよくニュースを賑わせますが、そういったハードウェアデバイスの技術でしょうか?私は、製品開発の9割をしめるソフトウェアを早く、安く作る技術、つまりソフトウェア工学こそが今、もっとも重要な技術であると信じています。

ハードウェア家さんおこられるかもしれませんが、ガリレオ的にいうならば「それでも、情報家電の最終製品開発の主役はソフトウェア開発だ」といった所でしょうか。

では、どうやったらソフトウェアは安く早く作れるのか、そのための基本原理を次回にお話いたします。また、そのすばらしい成功例である Android の成功理由もご説明します。
さらに、多くの方が「ソフトウェア工学なんて役に立たない、これまでも何度も投資してきたが無駄だった」という苦い経験をされていると思います。なぜそれらが役に立たなかったのか、何が悪かったのか、こちらもご説明させていただきます。

今日からしばらくは与太話しばっかりになりますので、仕様の参照はありません :-)

DCIM フォルダの秘密: 超解説編

ちょっと意外だったのですがこのブログにヒットした検索ワードのトップが”DCIM”でした。 そこで、DCIM フォルダを身も蓋もなく超解説してみます。

下記の日本語の仕様書の14ページの図が全てを物語っています。
http://www.google.com/url?sa=D&q=http://www.cipa.jp/hyoujunka/kikaku/pdf/DC-009-2010_J.pdf

DCIM フォルダはSDカードのようなリムーバブル(脱着可能な)記憶媒体にデジタルスチルカメラ(静止画デジカメ)の画像を保存する時、各社が同じフォルダ形式で保存しておけば、たとえば S社のカメラで撮影した画像を C社のカメラでも表示できてさらに F社の携帯に刺して撮影を足すこともできますね、という業界標準です。

14ページの図を一言で超解説すると、上記互換性を確保するため、下記が決められています。

1. ルートディレクトリが "DCIM" であること。どのカメラも携帯さえも、とにかく"DCIM" フォルダを開けばそこに撮影画像があります。そこに追加していけば別のカメラでも携帯でも表示できます。
2. その下のフォルダストラクチャもきまっているます。

言及した仕様書はすでにリンクを紹介すみです。

DTCPIP 入門の前に、その5、 obfuscation

DTCPIP の実装方法にはハードウェアソリューションとソフトウェアソリューションが考えられます、実際は世の中の製品のほとんどがソフトウェアソリューションだと思われますが。ソフトウェアで実装した場合、adopter agreement の ROBUSTNES RULES の 3.2.1 で software obfuscation を実施することを要求しており、さらに ROBUSTNESS CHECKLIST の No.14 でどのような obfuscation の手法を採用したのか確認が求められます。

obfuscation とはコードの難読化のことで、シンボルの削除はもちろん、データの分割、実行パスの複雑化(無意味な演算やパスを大量に挿入する)などを指します。ここでは、悪意の第三者による、バイナリを解析して秘密のロジックを盗もうとする意図を阻止することを目的としており、やる気をなくさせるに十分と考えうる程度に obfuscation をしなさい、と 3.2.1 で明記されています。

この”やる気をなくすのに十分”というあいまいな記載が必要になる部分が obfuscation の弱点です。暗号とちがい obfuscation には”十分な強度”という指標が存在しません。暗号の場合、守られているデータの寿命よりもそれを解読するのに必要な計算のほうが長ければ十分、つまり攻撃にかかる時間が時間切れより長ければ十分なので、攻撃方法の O(n) を評価しますが、obfuscation の場合、とにかくみなで根気よくバイナリを読んでいればいつかは絶対に読めてしまい、しかもそれがいつになるのかは人しだいなので、定量的な評価のしようがありません。

これまでウイルスソフトがアンチウィルスソフトのパターンマッチングを逃れるために延々と obfuscation を繰り返したり、違法コピーソフトが著作権侵害訴訟を逃れるために延々とobfuscation を繰り返すなどネガティブな使用法が多かった手法なためか、日本語で書かれた本が皆無な状態ですが、下記の本がバイナリファイルの解析方法から始まって obfuscation のほぼ全て、さらにやはりこの agreement で要求される anti debug にいたるまで網羅的に紹介している良書です。

ISBN:0321549252
ISBN:9780321549259

言及した仕様へのリンクは以下です。

ソフトウェア工学の話題

ニース空港のラウンジで帰国便を待ちながらこれを書いています。
クラゲだらけだったビアリッツと違い、ニースでは気持ちよく泳げました。
最初は、ビーチ(フランス語でプラージュうといいます)で遊びながら適当にブログも更新しようかとおもっていたのですが、ニースの乳白色の海の上でビーチマットでプカプカ浮いていると、頭の中が真っ白になってなにも考えられませんでした(^_^;)

これまでは DLNA、とくにいま話題の DTCPIP 関連のネタでしか書いてていませんでしたが(この分野でもまだ書くべき内容がたくさんのこっているのですが、たとえば最近の欧州での事情とか。DTCPIP は日本だけの事情とはいえなくなってきています)、本当はもっとソフトウエア工学のネタ、とくに規模見積もりやメトリクスとエラーとの関係(error proneness といいます)の最近の否定的な実証結果、携帯電話開発の話しやサーバの話しなども書きたいネタがたくさんの溜まっています。

日本に帰ったら、どうせ時差ぼけと猛暑で仕事にならないでしょうから(^_^;) このあたりのネタでもブログを更新していこうと思います。

今日はなににも言及してません(^-^)/

TrustZone 、 Android 端末で大事な鍵を守る方法

夏休みで南仏バスクビアリッツに泳ぎに来ているのですが、今年はクラゲの当たり年で初日に刺されて後は海辺お散歩ばっかりしています。ちなみにクラゲはフランス語でメドゥーサといいます。

さて、鍵を流出させてしまったときの罰金8億円が明記されている DTCPIP, CPRM HDCP といった情報家電に必須な仕様を Android に実装しようとすると厄介です。安全な鍵の置き場所がないからです。native code 上に鍵を隠すような方法をかんがえる方もいらっしゃるかもしれませんが、IDA PRO のようなたった20万円で買えてしまう Dis Compiler を使うと素人でも簡単に見えてしまいます。

Android 上で鍵を隠す手段としては、ARM Cortex A-9 以降のアーキテクチャが標準でそなえる TrustZone が有効です。TrustZone の仕組みを一言でいうと、CPU にセキュアモードとノンセキュアモードの二つの動作モードを用意し、さらにメモリ等のリソースにセキュアモード専用属性をもたせることでノンセキュアモードでの動作時のセキュアメモリへのアクセスに例外を発生させる仕組みです。もっとばっさりいうと、仮想セキュアチップという感じでしょうか。


言及した商品へのリンクは以下です。

  • IDA PRO: Hex-Ray社のサイト

http://www.hex-rays.com/idapro/

  • TrustZone: ARM社のサイト

http://www.arm.com/ja/products/processors/technologies/trustzone.php

8億円の罰金三兄弟、DTCPIP, CPRM, HDCP

まるまる3週間、ツール・ド・フランスの間、ブログの更新をさぼってしまいました。今年のカンチェラーラは目立ちませんでしたね、というかあれだけのメンバーをあつめたレオパード・トレックピレネーをつまらない消化試合にしてしまった挙句、アルプスでもエバンスに決定的な差をつけられずにタイムトライアルで負けてしまいました。

さて、http://d.hatena.ne.jp/Grenouille/20110622/1308727003 でも書いたように DTCPIP の鍵を流失させてしまうと8億円の弁償をしなければならないのですが、この罰則は DTCPIP 特有のものではなく、CPRM の Licence Agreement の 8.4.2章および HDCP License Agreement の 11.5章でも同様の罰則規定を定めています。これらの3つの仕様はみな情報家電上でコンテンツの著作権を守るためのキーになるものなのですが、同じような罰則規定をもうけているところが面白いですね。同じ人が書いた(コピペした?)仕様なのかもしれません。

言及した仕様へのリンクは以下です。

  • 4C CPRM/CPPM Licence Agreement:

http://www.4centity.com/downloadrequest.aspx
上記ページで氏名、所属等を入力して、仕様書へのリンクをもらう

  • HDCP Licence Agreement:

http://www.digital-cp.com/files/static_page_files/B97EEFE9-1A4B-B294-D0E5048D08CE6407/HDCP%20License%20Agreement0609_2011_clean.pdf