9月になりました!
今年も残り四ヶ月ですが今月よりドライブが趣味の太田くんがジョインしました!
そんな若干26歳の新人太田くんはスピリテック初の運用特化型人材!
スピリテック26歳トリオの一人としてこれからの活躍が楽しみです!!
運用部分が更に強固になったスピリテックと一緒にアプリ、サービスを作りたい企業様からのご連絡お待ちしております!
まずは電話 OR メールでご相談を!!
9月になりました!
今年も残り四ヶ月ですが今月よりドライブが趣味の太田くんがジョインしました!
そんな若干26歳の新人太田くんはスピリテック初の運用特化型人材!
スピリテック26歳トリオの一人としてこれからの活躍が楽しみです!!
運用部分が更に強固になったスピリテックと一緒にアプリ、サービスを作りたい企業様からのご連絡お待ちしております!
まずは電話 OR メールでご相談を!!
7月になりました!!
「Interop Tokyo 2017」では沢山のお客様にブースにお越し頂き、大盛況のうちに幕を閉じました。
5月に続き、6月には焼肉大好き新人の関くんの入社で社内はますます盛り上がってきております!
夏に向けて頑張って参りますので何かお困りのことがございましたらお気軽に当社まで御連絡くださいませ!!
6月になりました!!
間もなく梅雨な感じで心もジメジメになりかけておりますが、弊社は今年も今月7日(水)から9日(金)まで幕張メッセで開催される「Interop Tokyo 2017」に出展します!!
なんと今年は弊社サービスご紹介の他に、ブース内で南島原手延べそうめん大使による手延べそうめん配布も行います!!
是非会場にお越しの際には弊社ブースにもお立ち寄りくださいませ。
皆様のお越しを心よりお待ちしております。
担当:藤井
バグは早期に発見・修正するほど、安くすむ
次から色々な段階におけるテストを説明します。
評価対象と市場の既存競合製品の違いを分析する。
競合力を強くするにはどうすればいいかを考える。
知らない人同士のグループを作り、あるトピックについて議論してもらい、アイディアに対する市場の反応を調べる。
作業を観察したり、インタビューして業務の特徴を調べる設計手法
Q. 井上:「この三つを提示した意図って何?」
A. 藤井:「システムの評価項目が妥当かどうかをみるため」
この段階では考え方を検証します。
藤井:「代表的なレビューの一覧はこちらです。」
疑似コード:プログラムの構造を英語に結び付ける人工言語
疑似コードで記述したものをプログラム(疑似コードアナライザ)を用いて解析、バグを検出する。
コーディング段階でのテスト
藤井:「プログラマが内部構造を把握した上で行うテスト」
ホワイトボックステストでどれくらいしっかりテストをするかの基準
if (A < B and C = 5){
do_something();
}
$variable = 5;
モジュール毎のテスト(単体テスト)を行った後、各モジュールを統合してテスト(統合テスト)する。
すべてのモジュールが統合するまでテストを繰り返す。
全部ができあがってから一気にテストする。
プログラムを実行するテスト
1 .バグを修正した後、バグを検出したテストデータを再実行する
2 .バグ修正後に変更が他の機能に悪影響を与えていないか確認するためにテストを実行
システムの内部構造は考慮せず、仕様を満たしているかどうかのみを検証するテスト
下の二つで使用される
* 機能テスト:外部仕様での機能を満たしているか
* システムテスト:ユーザ要件をみたしているか
Q. 「ホワイトボックステストとブラックボックスの違いってわかりました?」
A. 「ホワイトボックステストとブラックボックステストは責任範囲が違う」
井上:「設計段階のレビューミーティングについては、ウォークスルーとインスペクションの時に観点をまとめておくものなので、重要」
(著)Cem Kaner, Hung Quoc Nguyen, Jack Falk, (翻訳)テスト技術者交流会(2001)『基本から学ぶソフトウェアテスト』日経BP社 488pp.
ISBN4-8222-8113-2
第3章 テストの種類と位置付け(p27-58)
担当:名生
名生:「皆さんはテストをやる目的とか考えたことありますか? 今考えてみてください たとえばこんなことを浮かべたのではないでしょうか?」
プログラムが 正しく動くことを 担保する
名生:「これはそもそも間違いです」
名生:「え?って思った方いると思います」
名生:「私も似たようなことは思ってたので・・・」
名生:「なぜこれがバツなのか」
名生:「もしプログラムが正しく動くことを担保するとすれば、完全テストを行えば可能でしょう」
名生:「ただこれは現実的に無理があります。」
名生:「可能な組み合わせが多すぎてそもそも全てをテストし切れませんし、仮に最後のエラーを見つけたとしてもそのエラーが最後だと知る手立てはありません。」
名生:「多すぎるならテストケースを割愛しいくつかを選択すれば?と思うかもしれないですが、その時点で完全テストではありません。」
全テストケースをやったことになっていませんから
名生:「そもそも、設計時に問題があり、 仕様通りに動いたからといって仕様自体が間違っているかもしれません。」
名生:「なので、完全テストというのは出来ません。」
名生:「ではテストを行う人はどうすればよいのでしょうか。」
それは1%のバグをみつけること
名生:「コードには100行当たり1~3個のバグがあるそうです。」
名生:「ただ、これはエンジニアがバグの確認後のバグの数であり、そのもともとの数は1行あたり1.5個のバグがあるとされています。」
名生:「実際にはテストの前にエンジニア自身が99%のバグは発見しているそうです。」
名生:「で、その残りの1% これを見つけることがテストをする方の目的であり使命といえるでしょう」
名生:「なぜこのような1%がでるのかというと?」
名生:「どんな優秀な人物でも自分が作ったものには自然と気付かないうちに確認を避けたり、誤った解釈をしているということがあるそうです。」
名生:「まぁ1%といってますが人によっては2%なり3%なりはするかもしれません・・・」
「プログラムが正しく動くことを担保する」
これ以上に、「バグを見つけること」
「バグはあると思いテストをするとよりバグを見つけられる」
岩尾:「モジュールの全ルートケース(完全テスト)は、実装者が行ってください。」
藤田:「完全テストは、作成のエンジニア、カバレッジツール(最近の環境は、大抵備わっている)を使って行いましょう。」
(著)Cem Kaner, Hung Quoc Nguyen, Jack Falk, (翻訳)テスト技術者交流会(2001)『基本から学ぶソフトウェアテスト』日経BP社 488pp.
ISBN4-8222-8113-2
第2章 テストの目的と限界(p17-26)
5月になりました!GWも明けてスピリテックは今日から通常営業です。
弊社は長休明けになるとそこら辺の物産展に対抗できるのではないか位の全国津々浦々なお菓子が揃って、ちょっと幸せな気持ちになります♪
次の3連休まで69日間もありますが、この幸せな気持ちを維持したまま5月も頑張ってまいります。
そんなスピリテックと一緒にアプリ、サービスを作りたい企業様からのご連絡お待ちしております!
まずは電話 OR メールでご相談を!!
4月になりました!
本来であれば新入社員が入社してくるシーズンではありますがスピリテックでは新卒ではなく、転職組の社員が今月からまた一名ジョインしました。
弊社最年少ハラタクさんです。
彼はC++使いで、好きな食べ物はピザとのこと。
※決して太ってはいません!寧ろ痩せ型です。
ハラタクと一緒に働く。
そんなスピリテックと一緒にアプリ、サービスを作りたい企業様からのご連絡お待ちしております!
まずは電話 OR メールでご相談を!!
担当:横山
いくつもの暗号技術が今現在のインターネットの安全性を支えている。
このうち特に重要なのが6つの技術
Message Authentication Code (略称 MAC)
送信者と受信者が共有鍵からMAC値を作成することで、オリジナルメッセージが、鍵を共有している送信者から受信したものであることを確認する。
データの正真性を確保する。
別称:共有鍵暗号、秘密鍵暗号
最初に鍵ペアを作成。(認証局登録・で正当性を証明)
暗号化の鍵と復号化の鍵を別々に管理する。
1. 受信者は公開鍵・秘密鍵を用意しておく
1. 送信者は受信者から公開鍵をもらう
1. 送信者は公開鍵でデータを暗号化して送信
1. 受信者は受信したデータを秘密鍵で復号化
(3)で送信するデータが盗聴されても第三者は復号化用の秘密鍵を持っていないので解読されずに済む。
鍵・鍵ペア作成等の際に乱数を活用する。
乱数:無作為性・予測不可能性・再現不可能性が必要 → 乱数を生成するソフト「疑似乱数生成器」
※マシンが生成するものは真の意味では乱数ではないので「疑似」が付く。
種を疑似乱数生成器に渡して疑似乱数列を出力する
ここまでに紹介したいくつかの技術は役割ごとにブロックになっており、差し替えができる
→ある部分のアルゴリズムがハッカーに突破された場合その1か所のアルゴリズムさえ改めれば、その他の仕組みは変えずに運用継続できる。
暗号化技術は見方を変えると「圧縮技術」と言える。
=> 長い平文の機密性を保つ・検証するのはコストが高い
技術 | 目的 |
---|---|
鍵 | 機密性 |
ハッシュ値 | 正真性 |
認証子(MAC値やデジタル署名) | 認証 |
乱数 | 予測不可能性 |
ビットコイン(Bitcoin)という仮想通貨・決済システムを例に暗号化技術が具体的にどのように活用されているかを紹介
中本哲史(なかもとさとし)という人物が投稿した論文をもとに2009年から運用開始。(日本は禁止)
ビットコイン上で行われた全トランザクションを記録しておく公開取引簿
値H?は前回のブロックのヘッダから生成したハッシュ値
T?は自分のブロックのトランザクション群のデータから生成したハッシュ値
ナンス(使い捨てのランダムな値)やタイムスタンプ等も含まれる
全世界のユーザーがビットコインを使うならばブロックの追加リクエストは
24時間常に同時多発的に存在する。→ P2Pネットワークによる承認
全ての分岐は一時的に保存されるが、一番長く伸びた分岐を正として承認する
前頁までの説明にある「ブロック」の追加は世界中の miner (採掘者)達の手によって行われている。
→ ブロック追加が成功すると報酬(block reward / 2015年時点で75万円)と、含まれるトランザクションの手数料をもらえる。
厳密に言えば改ざんされるが、改ざんされたであろう分岐は承認されない仕組み
前頁の例で、たとえばブロック1のトランザクション1-1の金額を書き換える
→ ブロック2のヘッダの内容が変わる
→ ブロック3も変わる・・・
という具合で後ろのブロックを接続していくことが困難になる
→正しい値を積んで伸ばしているノードよりも長い分岐を作れない
→承認されない(承認システムはノードの長さにで正否を判断するため)
1980年代にベネットとブラサールによって考案された量子鍵配送を示す。
「暗号」という名称だが、厳密には暗号を直接構成するのではなく、盗聴が不可能な通信を構成する技術。
量子の以下の2つの特性を利用する
1. 光子の変更方向を正確に測定することが原理t系に不可能
1. 測定することで光子の状態が変化する
補足 そもそも量子って何?
原子より大きい世界では、「物質」と「状態」をはっきりと区別できます。
( 「海水」という物質に対する「波」)
しかし原子より小さな世界「電子」には事情が異なる。
電子はエネルギーを持った波動だが、対応する物質がない。
→波動性と粒子性を併せ持っているものを量子と呼ぶ。(電子・光子など
左の図の電子が陽子の中心点から等距離を超高速でグルグル回ると右の図のように見える
→左図のように電子を粒ととらえて位置を決めてしまうと、電子がどのように動いているのかを特定できない
右図のように電子がどのように動いているのかの軌跡を基準に考えると、電子がどこに居るのかを特定できない
ハイゼンベルグの不確定性原理「粒子の位置と運動量を同時に確定することはできない」
量子論を通信技術に応用する
不確定性原理(位置と運動量は同時に確定できない)と、「量子は観測することにより発生する相互作用で状態を変える」という観測不能性を応用して、実際には偏光・スピン・位相等の状態を信号として送り込む。
量子が同時に複数の状態を持つことができる特性を利用した超高速のマシン
2011年5月11日、D-Wave Systemsは「世界初の商用量子コンピュータ」を謳ったD-Wave Oneを発表
→ ブルートフォースアタックに要する時間を大幅に短縮できる!
既存の暗号技術が突破される?
→ 前ページまでで紹介していた量子暗号は、特性上、盗聴自体を検知できるので量子コンピュータを使った不正行為にも耐えられる。
→ 耐量子暗号・ポスト量子暗号と呼ばれる
理論が完全でも現実は不完全
たとえば一般的な公開鍵の認証
認証局の公開鍵に対して「これを信用する」というユーザーの判断が発生する。
防御は完全ではければならないが攻撃は一点を破ればよい
暗号化技術が日進月歩で更新されているのと同じように暗号を破る技術も更新されている。
実装者として自分が開発に関わる暗号化・認証のフロー・仕組みに対して興味を持ちセキュリティに対する意識を高く持とう。
結城浩(2015)『暗号技術入門 第3版 秘密の国のアリス』SB Creative 446pp.
ISBN978-4-7973-8222-8
第15章 暗号技術と現実社会(p390-p411)
担当:大辻
1994年 Netscape Communications社が開発
設計レビューの段階で脆弱性が発見される
1995年 Netscape Communications社が発表
2011年 いくつかの脆弱性が発見され、使用禁止に
SSLには後方互換性があり、SSL 3.0発表後も2.0を利用することはできた
1996年 Netscape Communications社が発表
2014年10月 仕様上の脆弱性が見つかる
2015年6月 使用禁止に
1999年 RFC 2246としてインターネット標準化された
SSL 3.0をベースに細かい仕様が変更されている
ネゴシエーション時のバージョン番号は3.1
2006年 RFC 4346として制定
AES対応や新しい攻撃手法に対する強化
ネゴシエーション時のバージョン番号は3.2
2008年 RFC 5246として制定
いくつかのアルゴリズム追加
ネゴシエーション時のバージョン番号は3.3
2017年2月 そろそろドラフト最終段階
ネゴシエーション時のバージョン番号は3.4(予定)
から守る
通信経路を暗号化するのでHTTP以外でも利用できる
対応しているアルゴリズムの一覧を送信する
最も安全性の高いアルゴリズムを選択して応答する
サーバ証明書(ルート認証局含む)をクライアントに渡す
Note: 証明書の検証、相手にしか読めない暗号文の作成が可能に
鍵生成に必要なパラメータを送る
クライアント証明書もよこしなさい
サーバのターン終了
クライアント証明書をサーバに渡す
鍵生成に必要なパラメータを送る
私は間違いなく証明書の持ち主です
アルゴリズムの確定
クライアントからは以上です
Note: このメッセージ自体は暗号化されている
サーバからも以上です
Note: このメッセージ自体は暗号化されている
HTTP等のデータを共通鍵で暗号化して送受信するだけ
Note: 単純な暗号化だけでは盗聴しか防げない
サーバ証明書自体は認証局によって署名されている
OSやブラウザにインストールされている認証局の証明書で検証可能
プレマスターシークレット + ソルト
→
一方向ハッシュ関数
→
マスターシークレット(ClientHello/ServerHello時に生成されたランダム値をソルトとして使う)
同じ平文からは同じ暗号文が出力されるため、そのままだと鍵や平文の一部が予測されやすい
直前のブロックをXORするなどして安全性を高めるCBC、GCM、CCMなどがある
五つのアルゴリズムの組み合わせ
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
結城浩(2015)『暗号技術入門 第3版 秘密の国のアリス』SB Creative 446pp.
ISBN978-4-7973-8222-8
第14章 SSL/TLS(p364-p388)
担当:斎藤
PGP (Pretty Good Privacy, 「たいへんよいプライバシー」)は,Philip Zimmermann が開発した暗号ソフトウェア.
主な用途は,ファイルやメールの暗号化です.
また,署名やその検証も行えます.
一方,SSL/TLSやSSHと異なり,通信の暗号化はしません.
公開鍵暗号を使用しますが,その鍵の管理のために,認証局を設置せず,各利用者の責任で鍵を管理し,取得した公開鍵をチェックします.
そして,ハイブリッド暗号で暗号化されます.
メッセージまたはファイルは,セッション鍵と呼ばれる乱数の値を鍵として,対称暗号により暗号化され,そのセッション鍵は,受信者の公開鍵で暗号化されます.
PGPの別実装として,GnuPG (GNU Privacy Guard)があります.
こちらはGPL (GNU General Public License)に基づき無料で利用できます.
ターミナル(シェル)では,gpgというコマンドに,オプションをつけて実行.
SSL/TLS (Secure Sockets Layer / Transport Layer Security) や,SSH (Secure Shell) のポート転送を用いて,メールサーバとの通信を暗号化することができます.
しかしそれでは,送信後のメールの配送や,サーバで保管されるメールについては,暗号化されません.
Bcc (Blind Carbon Copy)は,メールのヘッダに宛先が表示されませんが,これも配送は暗号化されませんし,サーバで保管された状態のメールは,暗号化されていません.
これらに対して,PGPは,必ずしも安全でない通信経路やサーバを介しても,メッセージの秘密を守るための仕組みを提供しています.
パスワードつきのZIPファイル(暗号化ZIP)は,そのファイルごとにパスワードが設定されます.
しかし,何らかの理由でパスワードを変更したいと思っても,送付したあとには,できませんし,いくつも作るとなると,そのパスワードの管理が面倒です.
PGPの暗号化では,鍵(セッション鍵)が,受信者の公開鍵で暗号化されています.
したがってその安全性は,受信者の鍵の管理に依存します.
受信者の持つ秘密鍵は,パスフレーズを入力しないと使用できませんが,そのパスフレーズはあとで変更できます.
なお,暗号化ZIPでは,一つのファイルに対して,パスワードを知っている複数の人が復号できますが,PGPにおいても,複数の利用者が(それぞれの秘密鍵で)ファイルを復号できるような,単一のファイルを作ることは可能です.
S/MIME (Secure/Multipurpose Internet Mail Extensions) は,メールの暗号化や署名についての規格ですが,そのデータフォーマットは,PGPと異なります.
S/MIME では,鍵や証明書を発行したりその正当性を保証したりするため,認証局を必要する.
秘密通信方式 | 暗号化 |
---|---|
SSL/TLS | ポート転送 |
暗号化ZIP | fileごとにpwを設定 |
S/MIME |
送信側はあらかじめ、受信側の公開鍵を受け取っておきます.
その上で、本文の暗号化にかかるわけですが、通常の文章のままで暗号化をすると効果が薄いので、メールを圧縮します.
圧縮は、gzipやcompressなど可逆のものならなんでも構いません.
ついで、セッション鍵とよばれる、一時的に利用する鍵を生成します.
この生成したセッション鍵で、圧縮後のメールを暗号化すると同時に、セッション鍵自体を受信側の公開鍵を使って暗号化します.
この結果、暗号化した本文と暗号化したセッション鍵が作成され、これを両方とも受信側に送ります.
受信側はこれを受け取った後、まず自分の秘密鍵を使ってセッション鍵を復号化します.
そして、復号化したセッション鍵を使用して、本文の復号化も行ないます.
最後に圧縮を展開すれば、本文が元通りに読めるというわけです.
PGPの鍵は,公開鍵暗号系や,PKI (Public-Key Infrastructure, 公開鍵基盤) での考え方と,同じところもあれば,異なっているところもあります.
PGPを使うにあたっての原則は,次の5つです.
鍵情報は,16進8桁(32ビット)であらわされる,「鍵ID」を指定するのが一般的です.
私の鍵IDは,0x3BDCC722です.
これが,“【ユーザー】”という「ユーザーID」に結びつけられています.
しかし,PGPでは,私以外の人が,私と同じユーザーIDの鍵ペア(公開鍵と秘密鍵のペア)を作ることができてしまいます.
ソフトウェアに手を加えれば,鍵IDも同じにすることができます.
そのようにして作られる可能性のある,偽造鍵と,正しい鍵とを区別するため,公開鍵の利用者はあらかじめ,公開鍵の正当性を確認しておきます.
通常は,fingerprint (「フィンガープリント」「指紋」「ハッシュ値」とも呼ばれます)を使います.
受け取った公開鍵からfingerprintを求め,それが,鍵の所有者が提示するfingerprintと一致していれば,正当な鍵とみなします.(fingerprintまで一致するような,鍵の偽造は,現実的にできません.もし万一そのようなことがあれば,むしろ,秘密鍵の漏洩を疑うべきです.)
公開鍵を正当なものと確認したら,その鍵に,自分の秘密鍵で署名をすることで,以後,安全に利用できるようになります.
またその公開鍵に信頼度を設定することもできます.このように鍵の正当性を確認するとともに,信頼度を設定し,その情報をやりとりするしくみは,web of trust (「信頼の輪」または「信頼の網」)と呼ばれます.
なお,生成した鍵ペアを含め,所有し管理する鍵の集合をkeyring (「鍵束」または「鍵輪」)といいます.
Linuxなどでは,~/.gnupgに保存されます.複数の計算機に,共通の(もちろん同じ鍵IDの)鍵ペアを持たせることも可能です.
運用のためのアドバイスを,以下に記します.
結城浩(2015)『暗号技術入門 第3版 秘密の国のアリス』SB Creative 446pp.
ISBN978-4-7973-8222-8
第13章 PGP(p334-p360)