サンプル問題 科目A 問47

問47  経営者が社内のシステム監査人の外観上の独立性を担保するために講じる措置として,最も適切なものはどれか。 

ア  システム監査人に IT に関する継続的学習を義務付ける。 

イ  システム監査人に必要な知識や経験を定めて公表する。 

ウ  システム監査人の監査技法研修制度を設ける。 

エ  システム監査人の所属部署を内部監査部門とする。 

出典:基本情報技術者試験 サンプル問題

システム監査とは

全く知見のない問題です。システム監査人はシステム監査を行うのだと思いますが、そもそもシステム監査とは何でしょう。平たい表現を探すと、次のような記述がありました。

システム監査とは、専門的かつ中立的なシステム監査人に、会社の情報システムが適切に運用されているのか、総合的に点検・評価・検証してもらうことです。「情報システムのガバナンス、マネジメント、コントロール」に問題がないことを保証してもらえるほか、問題があれば改善に向けたアドバイスを得られます。 要するに、社内での情報システムの扱い方が正しいかを専門家に詳しく診てもらい、問題があれば改善点と具体的な方法を指摘してもらうのが、システム監査です。

stmn.co.jp

システム監査の基準

そう言えばシステム監査ではないのですが、会社で「出張旅費は出張旅費規程に則って処理していること」のような自主点検を行うことがあります。この出張旅費規程が正しさの基準になります。システム監査にも同様の基準があるはずです。

調べると、経済産業省のサイトでシステム監査基準が公開されていました。

www.meti.go.jp

外観上の独立性

問題文には「外観上の独立性」という印象的な表現があります。これは何でしょうか。

先ほどのシステム監査基準によると、【基準4】監査の独立性と客観性の保持が該当しそうです。

システム監査は、監査人によって誠実かつ、客観的に行われなければならない。

さらに、監査人が監査対象の領域又は活動から、独立かつ客観的な立場で監査が実施されているという外観にも十分に配慮されなければならない。

主旨は次のようになっています。

精神的独立性

システム監査は、客観性、誠実性の保持として、客観的な立場で公正な判断を行うという精神的な態度を堅持する監査人によって行われなければならない。

これが本質的に必要ですね。

外観的独立性

監査人の精神的独立性は当然であるが、さらにシステム監査は、組織体の内部監査部門で行われるものであれ、外部の専門事業者によって行われるものであれ、監査対象先から独立した立場で実施されているという外観が確保される必要がある。

あらぬ疑いを掛けられないためには見た目も大事、ということでしょう。解釈指針の2には、次のような記述があります。

監査人に精神的独立性が欠けるという疑いや印象を与えないために、システム監査は監査対象先から独立した監査人によって行われる必要がある。

(監査人が)所属する部門が、監査対象の領域又は活動と同一の指揮命令系統に属する場合、組織的な独立性が毀損されているとの外観を呈することに留意する。

とは言え、今回の問題では社内のシステム監査人なので、できることには限りがあります。

選択肢を見てみる

回答できそうな気がするので、選択肢を見ていきます。

ア  システム監査人に IT に関する継続的学習を義務付ける。 

監査人の本質的な能力を向上させると思いますが、外観には関係ないでしょう。

イ  システム監査人に必要な知識や経験を定めて公表する。 

監査人の能力が見えるようになりますが、独立性とは関係ないですね。

ウ  システム監査人の監査技法研修制度を設ける。 

これもアと同様ですね。

エ  システム監査人の所属部署を内部監査部門とする。 

監査部とかを設けるということですね。これが正しそうです。

答え

サンプル問題 科目B 問17

問17  

製造業の A 社では,EC サイト(以下,A 社の EC サイトを A サイトという)を使用し,個人向けの製品販売を行っている。A サイトは,A 社の製品やサービスが検索可能で,ログイン機能を有しており,あらかじめ A サイトに利用登録した個人(以下,会員という)の氏名やメールアドレスといった情報(以下,会員情報という)を管理している。A サイトは,B 社の PaaS で稼働しており,PaaS 上の DBMSアプリケーションサーバを利用している。 

 A 社は,A サイトの開発,運用を C 社に委託している。A 社と C 社との間の委託契約では,Web アプリケーションプログラムの脆弱性対策は,C 社が実施するとしている。 

 最近,A 社の同業他社が運営している Web サイトで脆弱性が悪用され,個人情報が漏えいするという事件が発生した。そこで A 社は,セキュリティ診断サービスを行っている D 社に,A サイトの脆弱性診断を依頼した。脆弱性診断の結果,対策が必要なセキュリティ上の脆弱性が複数指摘された。図 1 に D 社からの指摘事項を示す。 
 
項番 1  A サイトで利用しているアプリケーションサーバの OS に既知の脆弱性があり,脆弱性を悪用した攻撃を受けるおそれがある。 

項番 2  A サイトにクロスサイトスクリプティング脆弱性があり,会員情報を不正に取得されるおそれがある。 

項番 3  A サイトで利用している DBMS に既知の脆弱性があり,脆弱性を悪用した攻撃を受けるおそれがある。 
図 1  D 社からの指摘事項 
  

設問  図 1 中の各項番それぞれに対処する組織の適切な組合せを,解答群の中から選べ。 

出典:基本情報技術者試験 サンプル問題

問題について考える

こういうタイプの問題も出るのですね。問題文はひたすら長いですが、良い解説になっている気がします。

PaaSでは、サービス提供者(この場合はB社)がどれだけの範囲に責任を持つのか(問題文でだいたい説明されていますが)、というのがポイントです。

D社の指摘を見る

項番 1  A サイトで利用しているアプリケーションサーバの OS に既知の脆弱性があり,脆弱性を悪用した攻撃を受けるおそれがある。 

OSはB社の責任範囲ですね。

項番 2  A サイトにクロスサイトスクリプティング脆弱性があり,会員情報を不正に取得されるおそれがある。 

アプリの脆弱性で、委託契約があるので、開発したC社の責任範囲です。

私もずいぶん昔、XSS脆弱性だらけのアプリを作っていたことがあります。今はフレームワークで対処してもらえそうですが、全部自分でやっていると、対応漏れが出そうです。

項番 3  A サイトで利用している DBMS に既知の脆弱性があり,脆弱性を悪用した攻撃を受けるおそれがある。 

PaaSなので、DBMSはB社の範囲ですね。

答え

サンプル問題 科目A 問46

問46  ディスク障害時に,フルバックアップを取得してあるテープからディスクにデータを復元した後,フルバックアップ取得時以降の更新後コピーをログから反映させてデータベースを回復する方法はどれか。

ア  チェックポイントリスタート   イ  リブート 

ウ  ロールバック     エ  ロールフォワード 

出典:基本情報技術者 サンプル問題

選択肢を見ていく

今回は、運用の問題ですね。

ア  チェックポイントリスタート

私は、この言葉をデータベース以外の分野で聞いたことがあります。その時は、アプリを長時間(数日間とか)実行する用途でした。もし途中でアプリが異常終了した場合にやり直すのは大変なので、途中段階で時々保存して(これがチェックポイント)、もし異常終了した場合は最後のチェックポイントから再開する、というものでした。

データベースのチェックポイントとは

では、データベースにおけるチェックポイントとは何でしょうか。調べると、次のようなわかりやすい解説がありました。

gihyo.jp

トランザクションをコミットするとログには反映されるが、元のデータベースにすぐに反映されるかどうか分からないということですね。それで、元のデータベースに時々反映することがあり、それをチェックポイントと呼ぶと。

イ  リブート

いや、これはどの分野でも再起動の意味しかないのでは、と思います。再起動で復旧する障害もありますが、この問題の場合は違います。

ウ  ロールバック

これはトランザクションが異常終了したときに、データベースへの変更を元に戻す処理ですね。

エ  ロールフォワード 

これは、データベースに障害が発生したときに、ある一貫した状態のデータベースをもとに、その後のトランザクションはログを元に再実行する復旧処理ですね。

で、この問題は

この問題はロールフォワードですね。

チェックポイントリスタートはディスクに異常が無く、データベースが失われていなければ有効だと思いましたが、バックアップテープから復旧するような障害には当てはまりませんね。

答え

サンプル問題 科目B 問16

問16  次のプログラム中の [  ] に入れる正しい答えを,解答群の中から選べ。二つの [  ] には,同じ答えが入る。ここで,配列の要素番号は 1 から始まる。 

Unicode の符号位置を,UTF-8 の符号に変換するプログラムである。本問で数値の後ろに“(16)”と記載した場合は,その数値が 16 進数であることを表す。 

Unicode の各文字には,符号位置と呼ばれる整数値が与えられている。UTF-8 は,Unicode の文字を符号化する方式の一つであり,符号位置が 800(16) 以上 FFFF(16) 以下の文字は,次のように 3 バイトの値に符号化する。 

3 バイトの長さのビットパターンを 1110xxxx 10xxxxxx 10xxxxxx とする。ビットパターンの下線の付いた“x”の箇所に,符号位置を 2 進数で表した値を右詰めで格納し,余った“x”の箇所に,0 を格納する。この 3 バイトの値が UTF-8 の符号である。 

例えば ,ひ らが なの “ あ”の 符号 位置 であ る 3042(16)  を 2 進数で表 すと11000001000010  である。これを,上に示したビットパターンの“x”の箇所に右詰めで格納すると,1110xx11 10000001 10000010  となる。余った二つの“x”の箇所に 0を格納すると,“あ”の UTF-8 の符号  11100011 10000001 10000010  が得られる。 

関数 encode は,引数で渡された Unicode の符号位置を UTF-8 の符号に変換し,先頭から順に 1 バイトずつ要素に格納した整数型の配列を返す。encode には,引数として,800(16) 以上 FFFF(16) 以下の整数値だけが渡されるものとする。 

〔プログラム〕 

○整数型の配列: encode(整数型: codePoint) 

  /* utf8Bytesの初期値は,ビットパターンの“x”を全て0に置き換え, 

     8桁ごとに区切って,それぞれを2進数とみなしたときの値 */ 

  整数型の配列: utf8Bytes ← {224, 128, 128} 

  整数型: cp ← codePoint 

  整数型: i 

  for (i を utf8Bytesの要素数 から 1 まで 1 ずつ減らす) 

    utf8Bytes[i] ← utf8Bytes[i] + (cp ÷ [  ] の余り) 

    cp ← cp ÷ [  ] の商 

  endfor 

  return utf8Bytes 

解答群 

ア  ((4 - i) × 2)   イ  (2 の (4 - i)乗)  
ウ  (2 の i 乗)   エ  (i × 2)  
オ  2  カ  6  キ  16  ク  64  ケ  256 

出典:基本情報技術者試験 サンプル問題

この問題について

Unicode文字コードUTF-8エンコードする問題ですね。やっていることは簡単なのですが、問題の見た目と解答群の選択肢の多さで受験生を脅そうという作戦かも知れません。

6ビットずつ取り出すことを整数演算で実現するにはどうすれば良いか、について考える問題ですね。6ビットで表せる数は0~63なので、一番下の6ビットは64で割った余りで求まります。次に64で割った商を求めて、この一番下の6ビットを切り捨てます。

さらに言えば、このプログラムでは最上位も6ビットとして扱っていますが、入力が16ビットしかないので、本当は4ビットとして処理するのが正しいはずです。まあ、上位桁は自動的に0が拡張されて、そのビットは0になるので問題ないよね、ということだと思いますが。

答え

雑感

改めて考えてみると、算術演算でビットがどう変化するか、ということはそんなに自明ではない気がします。逆に私がこれをできる理由を考えてみると、ビット操作演算子のない言語Pascalで、ビット操作を行うプログラムを作る業務に長い間携わっていたことが大きい気がします。今から考えると、不思議な業務でした。

サンプル問題 科目B 問15

問15  次の記述中の [ a ] と [ b ] に入れる正しい答えの組合せを,解答群の中から選べ。 

三目並べにおいて自分が勝利する可能性が最も高い手を決定する。次の手順で,ゲームの状態遷移を木構造として表現し,根以外の各節の評価値を求める。その結果,根の子の中で最も評価値が高い手を,最も勝利する可能性が高い手とする。自分が選択した手を○で表し,相手が選択した手を×で表す。

〔手順〕 

(1)  現在の盤面の状態を根とし,勝敗がつくか,引き分けとなるまでの考えられる全ての手を木構造で表現する。 

(2)  葉の状態を次のように評価する。 

①  自分が勝ちの場合は 10 

②  自分が負けの場合は-10 

③  引き分けの場合は 0 

(3)  葉以外の節の評価値は,その節の全ての子の評価値を基に決定する。 

①  自分の手番の節である場合,子の評価値で最大の評価値を節の評価値とする。 

②  相手の手番の節である場合,子の評価値で最小の評価値を節の評価値とする。

ゲームが図の最上部にある根の状態のとき,自分が選択できる手は三つある。そのうち A が指す子の評価値は [ a ] であり,B が指す子の評価値は [ b ] である。 

解答群

問題を見て思うこと

とにかく、問題文を読んで理解するのに時間がかかりますね。

ただ、ずいぶん昔に遊びでこの種のプログラムを作った記憶があります。「アルファ・ベータ枝刈り」というような名前だった気がしましたが、検索してみると少し違いました。この問題はミニマックス法を用いていて、私が作ったプログラムはアルファ・ベータ法を用いたのでした。

解いてみる

考え方は簡単で、次のようにします。問題文に書いてあるとおりです。

  • 自分の手番の時は評価値(自分の有利さを表す値)が最大(自分が最も有利)になる手を選ぶ
  • 相手の手番の時は評価値が最小(自分が最も不利=相手が最も有利)になる手を選ぶ

すると今回の問いはどちらも相手の手番なので、[ a ] は評価値0と10の小さい方を選んで0、[ b ] は評価値-10と0の小さい方を選んで-10になります。

問題が大がかりで解くのに手間がかかりそうに見えますが、実は難しくない問題でした。

答え