スゴ技

【解説】平成30年度 春 基本情報技術者試験 【問1】

Blog:IT・情報処理BLOG |

【解説】平成30年度 春 基本情報技術者試験 【問1】

どうも、お久しぶりすぎる佐藤です。

IT分野では、私たちの生活の身近なところで日々使われているコンピュータシステムやWebアプリケーションを設計し、開発する勉強を日々行っています。
卒業生はシステムエンジニアやWebエンジニアなどとして就職をしています。もちろん国家資格の取得にも力を入れているので、資格を取りたい人には最適な分野です。


過去の基本情報技術者試験の解説はこちら


来月後半はいよいよ秋の国家試験ですね。申し込みしている方々はそろそろ追い込みかな?というところだと思いますが、直近の春試験は確認済みですか?

参考までに眺めていたのですが、午後の問1は悩むポイントがない、いかにも問1らしいものでした。少し見直しておきましょう。

平成30年度春期午後問1の用語の理解

この問題は、Webサービスにおけるセキュリティのひとつ、パスワードの管理にまつわる問題のようです。選択肢を見ると、設問1にて用語の理解の部分から出ているみたいなので、問題を無視して少し確認しておきましょう。

* AES

暗号のアルゴリズムですね。現代の暗号技術の中で、共通鍵としては非常に強力な部類と(その割に)低負荷で使えるということで様々な場所で使われていますね。

* Diffie-Hellman

これだけだと人名を2つ並べただけですが、共通鍵を(通信経路で共有せずに)端点同士で生成するアルゴリズムとして知られているものです、DH法と言われることもあります。

* RSA

こちらも3人の暗号研究者の名前から命名された、公開鍵暗号のアルゴリズムとして知られています。

* SHA-256

安全なハッシュコードを生成するアルゴリズムのひとつです。総称としてSHA-1とSHA-2といったものが知られていますが、SHA-256はSHA-2に属しており、SHA-1に比べるとより強力な部類に属します、というかSHA-1族は利用が推奨されていない状況です。なお、より上位のものとしてSHA-3族がありますが、こちらは実装方法がSHA-1,2とは異なったものになっています。

* TLS

httpを含む様々なアプリケーションプロトコルの下層として組み込むことで、自他の間での暗号通信および認証を行うアルゴリズムというかプロトコルです。歴史的経緯から先代のSSLと混ざってしまうことがありますが、これから使うならTLSになりますね。

平成30年度春期午後問1の解説

さて設問1、空欄aのある場所の直前にはハッシュ関数の一つであると記載されていますので、選択肢からすればSHA-256一択(→)です。用語の区分を理解していれば特に困らない問題です、さすが設問1。
空欄bの回答群にも目を向けてみましょう。さっと目を通した後、実際の空欄bを参照すると…ハッシュ関数の特徴を羅列していることがわかります。ということは羅列されてないハッシュ関数の特性について抽出すればよいということになります。

  • ア: 同じハッシュ値が得られては困るのです!つまり別のパスワードで認証通ってしまうことになりますからね。ちなみにこういうのが「衝突」と呼ばれます。
  • イ: 同じデータからであれば同じハッシュが得られる、そうでないとパスワード代わりに保存するには適していませんよね、多分これということで他を確認します。
  • ウ: ハッシュ関数の基本特性として求められているのは「一方向性」です。そのため元の文字列を生成することが出来ないことが前提となっています。ということでこれは論外。
  • エ: ハッシュ関数には「秘密鍵」の概念は出てきません、それは公開鍵暗号系の話でしょうからこちらも論外です。

ということでが回答の候補になります。一応挙げられている3つと合わせても重複というものもありませんからOKでしょう。

平成30年度春期午後問2の解説

続いて設問2を見てみます。先に空欄cとdの選択肢を眺めることにしますが…cはちょっといやらしいですね。前半は説明文からとってきて、くっつけて文意を読み取る必要があるようです。

パスワードだけをハッシュ化した場合のハッシュ値 + cの選択肢

となります。比較しているのはなんなのかということですが、「純粋にパスワードのみ」vs「ソルトと組み合わせたパスワード」となってますので、それを意識して読み込んでみます。

  • ア: パスワードだけをハッシュ化した場合のハッシュ値「と同じになる」: ハッシュ関数の特性を設問1の中で再認識してもらってますが、特徴(4)が関連します。ソルトをくっつけて別の文字列になっているのにも関わらず同じハッシュ値になるのであれば、それはまさに衝突です。困りますので違います。
  • イ: パスワードだけをハッシュ化した場合のハッシュ値「とは異なる値になる」: こちらも特徴(4)ですね。別の文字列ですので異なる値になってもらわないとハッシュの性質上困ります。ということで候補です。
  • ウ: パスワードだけをハッシュ化した場合のハッシュ値「よりも長さが長い」: ハッシュ関数の求められる仕様として、データ量にかかわらずハッシュの長さは一定というものがあります(特徴(1))。データ量に応じて長さが変わりのであれば、サイズなどが類推されて元のデータを絞り込める可能性が出てくるからです。ということで違います。
  • エ: パスワードだけをハッシュ化した場合のハッシュ値「よりも長さが短い」: 選択肢ウと同じ理由で異なります。

ということで正解はになりますね。

ちなみに特徴(4)で「1文字でも」とありますが、実際のところ1ビットだけでも結果が大きく変わるレベルが期待されています。1ビットずれたのがハッシュ値1ビット分だけ変わりました、では気づきにくいからです。

ソルトはパスワードを決めた人が多少ランダム性を持たないパスワードを選択したとしても、そこにランダムな文字列をくっつけることにより文字のランダム性を強化してパスワードの強度を上げるという意味で意味を持ちます。

そのため事前にソルト+パスワードからのハッシュ値を求めておく事前計算に対しても、事前計算の範囲を広げるという効果をもたせることに繋がります。1文字に使える形状(英数字記号)に限界があっても、文字数を増やせればその分当たりにくくなりますからね。

ソルトを各パスワードに対してランダムに設定できることで、強化できるということにもなります。
空欄dに対する選択肢も見てみましょう。

  • ア: これって事前計算そのものを指していますよね、論外。
  • イ: パスワードファイルにソルトが入っていないと、パスワードのハッシュ計算が行なえません(ハッシュはソルト+パスワードから生成しているため)。そのため何らかの形でソルトは格納されています。もちろん用途によってはパスワードファイルとは別にソルトを格納することもあります。この部分は後で少し補足します。
  • ウ: パスワードファイルの入手に対する困難さは今回の問題と関係ありません。
  • エ: これは先程あげたソルトの意図に沿ったものになってます。正解ですね。
  • ということで空欄dはになります。

平成30年度春期午後問3の解説

最後は設問3です。設問3では、パスワードファイルを奪われたときに悪者側が行うであろうパスワードの総当たりについての対策です。

ソルトは事前計算の範囲を広げるという目的がありますが、別のベクトルで「計算量を増やさせる」という言わば「嫌がらせ」の手法として、ストレッチングという手法が知られています。

設問3の文章がまさにその内容ですが、一つの最終的なハッシュを計算するために、相当数の計算をさせないといけません。その結果としてパスワードハッシュの生成に対する時間的コストが増大となるので、選択肢としてはとなります。

パスワードに対するセキュリティにおいては、パスワードそのものはできる限り保存しない、どうしても必要ならハッシュなど、復元の難しい方法で保有すること、また、パスワードハッシュが抜かれたときの時間稼ぎやそれに対する演算コストをある程度意識した設計が必要になります。

特にストレッチングは「正しい認証だったとしてもそれだけ消費が発生する」ということにもなるので認証が多いシステムでは問題としても上がってくるかもしれません。

悪用されると認証を同時多発的に発生させてCPUを食いつぶすDoS(DDoS)に発展する可能性もあります。このあたりまで考え始めると、面倒なので認証については別の組織のを間借りするするほうがいいなとも思う昨今です、いわゆるSSO(シングルサインオン)ですね。

…エイイエエ…少し偏りすぎてませんかね…

2018年(平成30年度)春期の解説

Date:

神戸電子の
IT・情報処理学科
についてもっと知りたい!

Webアプリケーション等のシステム管理、設計、開発が行える総合的なITエンジニアを育成する学科です。

学科紹介を見る (神戸電子サイト)

学科紹介イメージ
Info神戸電子からのお知らせ

Tagタグ

Teamライターチーム紹介

神戸電子オフィシャルSNS

オープンキャンパスなどの
誰でも参加OKの楽しいイベント
やブログの最新記事などお届けします!

ページの上へ移動