クイックソートとその計算量について

【編集中】

数列を昇順または降順に並べるアルゴリズムの一つにクイックソートがあります。直感的に分かりやすいバブルソートと比較してピボットによる分割があったりでめんどくさいイメージがあったのですが、有名なアルゴリズムなので勉強しておきたいと思います。以下計算手順です。テストケースとして次の数列を扱います。

$$A={4,8,6,5,2,1,3,9,7}$$

  1. 基準値を決めます。たとえば、最初と最後の要素の平均にします。
  2. 前方から基準値より大きな数を、後方から基準より小さな数を探します。見つかったら入れ替えます。
  3. 得られた列はぶつかったところを境に、基準値よりも小さいグループと大きいグループに分かれています。そして、この得られた列それぞれに同じ手順を繰り返していきます。

qick

この操作を繰り返すことで数列を昇順に並び替えることができます。それではこの操作をC言語で記述してみます。


#include <stdio.h>
int main(void){

return 0;
}

CT画像の読み込み方書き出し方

第一回の勉強会では大学で使用しているマイクロフォーカスX線CT(ScanXmate-A130ss940, コムスキャンテクノ株式会社)で採用されているRAWデータの画像を読み書きする方法を勉強しました。今回は最終的にrawデータを読み込んで、リアルタイムで閾値処理をするプログラムを作成しました。

rawデータの読み込み方

今回扱うrawデータは640×480(307200)pixelですが、データの大きさは614400byteとピクセルの情報の2倍の大きさとなっています。これは2byteで1pixel分の情報を表していることを意味していてこの画像が16bitのrawデータであることがわかります(1byteが8bitです)。

data16bitの画像を読み込むためには、2byte分の情報から1pixelの情報を知るために特別な処理が必要となります。画像にはビッグエンディアンリトルエンディアンという記録方法の方式があります。例えば{1234ABCD}という4バイトのデータをデータの上位バイトからメモリに{12 34 AB CD}と並べる方式をビッグエンディアン、{CD AB 34 12}とデータの下位バイトから並べる方式をリトルエンディアンと言います。それぞれデータの読み込み方が異なってくるので注意が必要です。

$$d_1=b_1+b_2\times256$$

もしくは

$$d_1=b_1\times256+b_2$$

となります。

public static void readRawData() {
  File f = new File("○○○.raw");
  try {
    DataInputStream dis = new DataInputStream(new FileInputStream(f));
    //データの大きさだけバイト型の配列を用意
    byte[] b = new byte[dis.available()];
    //データを読み込む
    dis.read(b);
    //データの形式に合わせてint型の配列に画素地を入れる(今回は16bit)
    for (int i = 0; i < b.length / 2; i++) {
      rawdata[i] = (0xff & b[i * 2]) + (0xff & b[i * 2 + 1]) * 256;
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}

上記のように記述することによって16bitのrawデータを配列に格納することができました。配列に数値を格納できれば、閾値処理を行ったり、平滑化フィルタをかけたりなど様々な画像処理を行うことができるようになります。画像は画像の形式によって配列に格納する方法が変わってきます。例えばTIFF形式の画像ファイルの場合、ヘッダやフッタ(データの最初と最後)に画像に関する情報が入っている場合があり、このような画像では単純に配列に格納するだけでは読み込むことができません。

rawデータの表示方法

続けて表示方法です。描画を行うクラスを作成し、メインクラスでインスタンスを生成し、描画を行うます。NetBeansの場合はパッケージを右クリック→新規→JPanelフォームをクリックし、描画を行うパネルを作ります。そうすることでJPanelクラスをスーパークラスとするサブクラスが自動生成されます。自動生成したクラスの中に以下のコードを記述します。

public void paintComponent(Graphics g){
  //背景を白く塗りつぶす
  g.setColor(Color.white);
  g.fillRect(0,0,width,heigth);
  //画像データを描画する
  for(int i = 0; i < height; i++){
    for(int j = 0; j < width; j++){
      //65536諧調になっているので256諧調に変換
      int c = rawdata[i * width + j]/256;
      //色をセット(グレースケールなのでRGBすべてに同じ値を入れる)
      g.setColor(new Color(c,c,c));
      //1pixelずつ色を塗る
      g.drawLine(j, i, j, i);
    }
  }
}

上記のコードを記述し呼び出すことで、rawdata[]に格納していた画像のデータを描画することができます。次に呼び出し方についてです。

initComponentsメソッドが記述されているメソッドに以下のコードを書き足します。ちなみにinitComponentsメソッドはコンポーネントの作成に関するコードが記述されていてプログラムの中で一番最初に呼び出される部分になっています。

public StudyCt() {
  initComponents();
  //インスタンスの生成
  PanelDraw pDraw = new PanelDraw();
  lbl1.setLayout(new BorderLayout());
  //生成したパネルをラベルの上に張り付ける
  lbl1.add(pDraw);
  //外観を成形する
  pack();
}

これでおおまかな部分は完成です。後は閾値を変更した後、ボタンを押した後など随所でrepaintメソッドを呼び出すことで、再描画を行うことができます。

rawデータの書き出し方

16bitのrawデータとして画像を書き出します。読み込み方と方法は似ていて、おまじないの部分が多くなってしまいますが、以下のように記述します。理由は不明ですが書き出すときはsng形式で書き出すようです。

public void writeRaw(){
  File f = new File("○○○.sng");
  int bit = 16;
  try{
    byte b1[] = new byte[width * height * bit / 8];
    for(int i = 0; i < height; i++){
      for(int j = 0; j < width; j++){
        int buf = 0;
        if(rawdata[j][i]>65535)buf = 65535;
        else if(rawdata[j][i] < 0)buf = 0;
        else buf = (int)rawdata[j][i];
        //1pixelのデータを2byte分に分けて配列に格納する
        b1[(i * 640+j)*2] = (byte)(buf%256);
        b1[(i * 640+j)*2+1] = (byte)(buf/256);
      }
    }
    FileOutputStream fos0 = new FileOutputStream(f);
    fos0.write(b1,0,widht*height*2);
    fos0.close();
  }catch(IOException e){
  }
}

上記のように記述することで○○○.sngという画像ファイルを作成することができます。だいたいの部分が読み込むときと逆の操作を行っているのがわかると思います。配列に格納するときは条件分岐させて0以下65536以上の情報を持っているpixelがないようにしています。配列に格納できたら書き出してファイルを閉じます。これで完成です。

今回の勉強会で勉強したことを使って簡単なソフトを作ってみました。CTの画像を読み込んで、閾値処理を行い形状と拡大率がわかっている被写体に対して理想的な再構成画像とどれだけ違いがあるかを調べることができます。勉強会大変勉強になりました。

スクリーンショット 2013-10-12 11.40.51

TCP/IP -データリンク層と物理層-

データリンク層と物理層の概要

ネットワーク層の下に位置する、データリンク層はネットワーク間の違いを埋める働きがあります。データリンク層ではデータにヘッダをつけたものをフレームと言います。

また、データリンクの中で信号が流れている部分を物理層と言います。ここでは、ビット列と信号の返還が行われますが、その方法は機器の持つ性質に依存するため、決まったプロトコルはありません。物理層は、他の層と性質が異なるので、データリンク層の一部と考えたり、TCP/IPの階層には含まない場合もあります。

コンピュータからネットワークの玄関口となる機器をネットワークインターフェースカード(NIC)と呼んでいます。NICにはMAC(Media Access Control)アドレスという固有のアドレスが割りふられていて、データリンク層ではこの番号を使って機器を特定しています。ネットワークを超えるときにはIPアドレスが、データリンク層に入ってからはMACアドレスが使用されます。IPアドレスとMACアドレスの違いは、私の解釈ですがIPアドレスはコンピュータを識別するためのもので、送信先と送信元に割り振られてます。一方でMACアドレスはルータなどにも割り振られていて、どの機器を仲介して通ってくるかを指定する目的で使用されるものだと思います。IPアドレスはソフト的に割り振られているため変更が容易です。

[expand title=”Trigger Text”]

データリンクを構成する要素  

  • ノード:データリンク上にある機器のことで、コンピュータやルータのことを指します。
  • 通信媒体:ノード間をつなぐケーブル。その種類には金属線ケーブル、光ファイバーケーブル、無線などがあります。金属線ケーブルが電圧の変化で信号を伝えるのに対して、光ファイバーケーブルは光の明滅で信号を伝えています。
  • ノードと通信媒体をつなぐ機器:ビット列と信号の変換を行います。ネットワークインターフェースカード(NIC)やモデムなどがあります。

データリンクの種類  

  • イーサネット:ネットワーク上のすべての機器上に信号を送り、該当する機器だけが受け取る。最も普及しているデータリンク
  • トークンリンク:ネットワーク上に流れているトークン(しるし)というフレームを使って通信。トークンを取得したコンピュータしか送信できないので(トークンパッシング方式)、フレームの衝突が起きない。
  • FDDI:光ファイバーを使った、トークンパッシング方式のデータリンク。
  • 無線LAN:電波や赤外線を利用。
  • Bluetooth:2.4GHzの電波帯を利用。

xDSLとWiMAXについて  

ADSLや、SDSLなど電話線を使ったデジタル通信の技術を総称してxDSLと呼びます。SDSLがアップロードとダウンロードの速度が等しいのに対して、ADSLはダウンロードの方が早くなっています。現在では携帯電話やWiWAX(Worldwide Interoperability for Microwave Access)など無線系のインターネット接続サービスが増え、ADSL利用者は減少してきています。WiMAXは高速モバイル通信を実現する次世代ブロードバンドで、下り最大40Mbps、上り最大15.4Mbpsと光通信には及ばないものの、動画を再生するにも十分な通信速度です。残念ながら私のアパートではカバーされていませんが、人口カバー率は主要都市では99%、全国でも90%もカバーしているようです。モバイルルーターだけでなくPC、スマートフォンなどに内蔵されたものもあります。

データリンク上の機器について  

  • リピーター:ネットワーク上の信号を補正し、信号の劣化を防ぐ。
  • ブリッジ:信号の補正に加えて、異なる2つのデータリンクをつなぐ機能を持つ。
  • ハブ:ネットワーク上でケーブルを分岐するための機器。リピータの役割も持つ。
  • スイッチングハブ:宛先MACアドレスを見て、特定のノードにのみ信号を送る。

—————————————以下参考文献————————————————–

IPアドレスとMACアドレス」 http://www.mm-labo.com/computer/tcpip/ipaddress/ipaddressandmacaddress.html
「WiMAXと光を比較」 http://wimax-hikari.provider-fan.com/
「TCP/IPの絵本」 アンク著

[/expand]

TCP/IP -ネットワーク層-

ネットワーク層の概要
TCP/IPの5階層のうち中間に位置するネットワーク層についてです。この層は複数のネットワークを越えて宛先のコンピュータにデータを届ける役割を担っています。ほかの層とは違い、主となるプロトコルはIP一つしかありません。
[expand title=”Trigger Text”]

IPプロトコルについて

送信側では、トランスポート層からデータを受け取り、宛先を特定する番号(IPアドレス)などを書き込んだIPヘッダをつけて、データリンク層に渡します。トランスポート層でセグメントと呼ばれていたものは、ネットワーク層ではIPヘッダがつけられIPデータグラムと呼びます。IPのデータ転送はベストエフォート方式と呼ばれています。ヘッダが壊れていないかのチェックや宛先の住所が存在しない時の対応はしますが、再送処理はしません。このことから信頼性のないプロトコルと呼ばれることがあります。受信側では、IPヘッダに書かれたIPアドレス(宛先の住所)を確認して、自分あての時のみ受け取ります。そして、トランスポート層の指定されたプロトコルに渡します。

IPアドレスについて

IPアドレスはネットワーク上の機器を区別するための番号です。番号の重複を防ぐためにはICANNという機関が中心になって世界中のIPアドレスを管理しています。32桁のビット列からなり基本的に次のような構造になっています。

ipadresss

ネットワーク部にネットワーク固有の番号が入り、ホスト部に個々のコンピュータを表す番号が入ります。通常は8ビットずつピリオドで区切り、10進数で表します。

宛先窓の道案内

通信サービスにおいて、ネットワーク間をつないでパケットが宛先に届くまでの道案内をするための機器にルータがあります。ルーターのネットワーク層ではIPヘッダに記されたIPアドレスを見て次の転送先を決定します。通信の世界ではコンピュータ間の距離を通過したルータの数で表します。この時に使用する単位をホップといいます。ルーターが行う宛先までの経路決定をルーティングといいます。ルータはルーティングを行うためにルーティングテーブルという情報を持っています。

[/expand]

セキュリティの技術について

近年サイバー攻撃が問題となり話題となっていますが、ウイルスや不正アクセスなど、ネットワークに潜む様々な危険からコンピュータを守る技術があります。

暗号化

情報を守るための最も基本的な仕組みです。データをある法則に基づいて加工し、第三者が容易に読めないようにすることを暗号化、元に戻すことを復号化と言います。送信側は「鍵」と呼ばれる値を使って暗号化し、受信側は「鍵」を使って復号化しています。

電子署名

データが改ざんされていないかをテェックする仕組みです。データを特殊な方法で数値化し、それを暗号化したものを電子署名といいます。受信側は暗号化された数値を復号化し、送信側と同じ方法でデータを数値化し、等しければ改ざんがないと判断されます。

認証局による保証

通信相手の身元を保証する機関として認証局(CA局)があります。認証局は通信者の間に立ち、第三者的な立場から通信を保証する証明書の発行、管理を行います。

セキュリティプロトコル

暗号化や認証を行うセキュリティプロトコルを使うと、TCP/IP通信の安全性を強化できます。セキュリティプロトコルには、階層の間に挿入して使うものや、ある階層に含めて使用するものがある他、既存のプロトコルと組み合わせて使うものもあります。代表的なプロトコルとしては、遠隔ログイン時の通信を暗号化するSSH(Secure Shell)やデータを暗号化するSSL(Secure Socket Layer)があります。

SSH

別のコンピュータにログインする際、通信を暗号化するためのプロトコルです。コマンドを暗号化して流すので、仮に第三者がパケットを盗んでも簡単には通信の内容を解読できません。遠隔ログインで有名なTelnet(テルネット)には暗号化の仕組みがないので盗聴される危険性があります。現在はTelnetによるリモートログインを受け付けているサーバは少なくなっています。

SSL

ブラウザを介してやり取りする相手を認証し、データを暗号化するためのプロトコルです。ショッピングサイトなどで多く使われています。SSLを適用しているWebページのURLは「https」から始まりHTTPとは異なるポートを使用します。

SSLファイアウォール

firewall(防火壁)は、外部の攻撃からコンピュータを守るための仕組みです。送られてくるパケットを無条件に受け入れていては、コンピュータの安全は確保できません。そこで、パケットを制御する機能を持ったソフトウェアやハードウェアを利用します。これらを総称してファイアウォールと言います。パケットを制限したいところに設置し、設置するとチェック済みのパケットのみしか通ることができません。LANの入り口に設置すればLAN全体を守ることができます。ここのコンピュータに設置することもできます。

具体的には、階層ごとにヘッダの内容に応じたチェック項目を設け、それらをクリアしたデータだけを上の階層に渡すという方法で、不審なデータを振るい落としています。

たとえば・・・

■アプリケーション層

ウイルスの侵入を避けるため、決められた形式のファイル以外は受け付けない!

■トランスポート層

決められたポートあてのパケット以外は受け付けない!
通信を確立していない相手からのパケットは受け付けない!

■ネットワーク層

許可されたIPアドレスからのパケット以外は受け取らない!

安全性を重視すれば、その分ユーザーのできることは制限されます。

————————–参考文献—————————————

「TCP/IPの絵本」
「Wikipedia」 http://ja.wikipedia.org/wiki/Telnet

TCP/IP -トランスポート層について-

トランスポート層の概要  

TCP/IPのアプリケーション層の次はトランスポート層と呼ばれています。アプリケーション層がサービスを実現する役割があるのに対して、トランスポート層には、アプリケーション層とネットワーク層のデータのやり取りの橋渡しを行う役割があります。そのデータの橋渡しを行う方法によって、TCP(Trancemission Control Protocol)とUDP(User Dategram Protocol)の2種類のプロトコルが存在します。TCPはwwwサービスや電子メールなどに使われる信頼性を重視した場面で用いられるプロトコルになっています。一方で、UDPはストリーミングやIP電話などスピードが重視される場面で使用されるプロトコルです。
[expand title=”Trigger Text”]

TCPプロトコル  

TCPはデータを確実に届けるために、受信側と1対1の通信を行います。このような通信をコネクション型通信と言い、おおまかに次の3ステップから成り立っています。トランスポート層で扱うデータの単位をセグメントと言います。

  1. 受信側がデータを受け取れる状態でるかどうかを確認してから通信を開始。
  2. データを決められた大きさに分割して、TCPヘッダをつけて順番に送信する。
  3. データを送り終わったら、通信を終了する。

このように受信側との連絡を密に取ることによって、データ送信の確実性を高めています。その通信状況を伝える手段として使われるのが、TCPヘッダにある6ビットのコントロールフラグです。相手に伝えたい項目を「1」にしてフラグを立てます。

brwu

URG(Urgent):1ならセグメントが緊急データを含んでいる。
ACK(Acknowledgment):1なら通信の確認に対して了解した。
PSH(Push):1ならセグメントをすぐにアプリケーション層に移す。
RST(Reset):1なら通信を強制的に切断する。
SYN(Synchronize):1なら通信の開始を要求する。
FIN(Fin):1なら通信の終了を要求する。

また実際の通信を始める前に、両者が扱えるデータ量を確認します。セグメントサイズウインドウサイズ(一度に受け取れる量)を確認して、数値の小さい方に合わせます。ウインドウサイズは通信の途中でネットワークがすいている時は大きくし、混んでいるときは小さくするなど状況に応じて調節できます。

受信側ではTCPヘッダに書き込まれたポート番号を見て、指定されたアプリケーションプロトコルにデータを渡します。データが1つのセグメントに収まっていない場合は受け取ったデータをもとの形に組み合わせてからアプリケーション層に渡します。TCPヘッダでは次のような順序と大きさで書き込むように決められています。

adeih

確認応答番号ウインドウサイズは受信側が書き込むことになっています。

インターネットでは、パケットがどこかでいきなりなくなる事があリます。 両者で何が届いたかを把握しているため、足りないものを再度送りなおす事が可能です。 このように再度送り直すことを再送と 呼びます。この信頼性は、アプリケーションプログラマにとっては非常にありがたいものです。 普通にプログラムを書く人は「ネットワークでパケットがなくなったらどうするか」や「ネットワークの途中でデータの内容が変わったらどうしよう」というの は考えたくありません。 TCPを使うことにより、プログラマはそのようなわずらわしさから解放されます。 メール、WWW、FTPなどでは、データがそのまま伝わることが要求されます。 そのため、それらのプロトコルはTCPを使った通信を行っています。

UDPプロトコル  

UDPでは、事前に打ち合わせをしないで一方的にデータを送りつけるコネクション型通信を行います。複数の相手に同時にデータを送信することができ、特定の複数の人に贈ることをマルチキャスト、不特定多数に送ることをブロードキャストと言います。UDPでやることは以下の2つだけです。

  1. データが壊れていないか確認し、壊れていたら破棄する。
  2. UDPヘッダを外して、指定されたアプリケーションプロトコルに渡す。

——————————以下参考文献です。——————————

・「TCP/IPの絵本」, アンク, SHOEISYA
・Geekなページ, http://www.geekpage.jp/technology/ip-base/tcp-udp.php

[/expand]

TCP/IP -TCP/IPの概要-

1.TCP/IPとは…

インターネットで採用されているコンピュータネットワークを実現している通信プロトコル群のことです。現在全世界共通の通信プロトコルとして使用されています。通信プロトコルとはコンピュータどうしが円滑にデータのやり取りを行うためのルールのような物です。TCP/IPは特定の機器に依存しないことや、データの伝達速度、信頼性において大変優れた仕組みとなっています。インターネットサーバーを設置したり、ソフトウェア開発を行っていくうえで避けて通ることのできない項目のようです。
[expand title=”Trigger Text”]

pc

2.5つの階層について…

TCP/IPは5つの階層で構成されています。送受信に関わる一連の作業をいくつかの階層に分けて行い、その各段階をレイヤーと言います。5つのレイヤーはそれぞれアプリケーション層トランスポート層ネットワーク層データリンク層物理層に階層化されています。

tcpip

受信側と送信側の各層どうしが情報を交換するために、送信側の各層でヘッダ(データよりも前に付加した情報)やトレーラ(後ろに付加した情報)を付加しています。

3.アプリケーション層

アプリケーション層には、通信サービスにおけるサーバーとクライアントのやり取りを定めたプロトコル(アプリケーションプロトコル)があります。その一例であるwwwサービスを支えているプロトコルであるHTTPプロトコルについてみていきます。HTTPプロトコルは「要求」と「応答」という2種類のパケットを使って、1つの要求に対して1つの応答を返す非常にシンプルなプロトコルです。

httppc

パケットはヘッダボディ(データ)に分かれています。要求パケットのヘッダ部分には要求の種類を示すメソッド要求ヘッダと呼ばれるサーバーへ伝えるクライアント情報(対応しているファイルの種類や文字コード、言語など)が記述されています。項目名と情報はコロンで区切られています。ボディには要求時に必要なデータが入りますが、メソッドがGETの場合は空になります。以下要求パケットの例です。ヘッダとボディの間には空行が入ります。

 GET/home/index.html HTTP/1.1 (メソッド:GETの他にPUTなどがある)
——————————————————————————————————————-
Host:www.○○○.○○○.co.jp
Accept:
text/html, text/plain, text.sgml */*;u=0.01
Accept-encoding:gzip, compress
Accept-Language:ja, en
If-modified-Since:Wed, 31 Aug 2013 12:00:00 GMT
User-Agent:Internet Exploer7.0
  空行———————————————————————————————————————————
  ●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●

サーバーがクライアントに送る応答パケットのヘッダは処理結果を示すステータス行とクライアントに渡すデータに関する情報を記述する応答ヘッダに分かれています。ボディにはクライアントに渡すデータが入っています。

 HTTP/1.1 200 OK (ステータス行:正常に処理できた場合は200番台の数字が入る)
—————————————————————————————————————
Date:Wed, 31 Aug 2013 23:59:59 GMT
Server:NCSA/1.5.2
Last-modified:Wed, 31 Aug 2013 12:00:00 GMT
content-Type:home/gif
Content-length:334
   空行—————————————————————————————————————-
<html>●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●●●●●●●●●●●●

HTTPプロトコルはもともと要求されたデータを返すことだけを目的に作られています。そのため一回の要求と応答で通信は完結し、過去に行った通信と関係づけられることはありません。このような一回完結のプロトコルをステートレスプロトコルと言います。

アプリケーションプロトコルにはほかにも電子メールの送信に関わるSMTPプロトコルと受信に関わるPOP3プロトコルなどがあります。

[/expand]

研究背景について

「X線CTの精度向上に関する研究」についての概要

近年,機械デバイスや電子デバイスは様々な部品を複合した一体品として製造・出荷されています。これらのデバイスの内部構造非破壊検査するためには,三次元の形状情報を直接的に得ることが可能なマイクロフォーカスX線CTが非常に有効ですが、様々な被写体を撮影したいという声がありその性能は十分であるとはいえません。

また、真空管の一種であるX線管装置では、フィラメントを加熱して生じた電子を電圧により加速して、ターゲットであるタングステン等の金属にうちこむことでX線を発生させています。しかし、X線の発生効率は非常に低く、電子の運動エネルギーの99%以上は熱エネルギーに変わりターゲットを含む陽極部材を加熱しています。これがX線CT装置における焦点移動の主因となっており、高精度な撮影が必要になるほど焦点移動による影響が大きくなると考えられます。

被写体の例として、マイクロ歯車透析用中空糸を考えてみたいと思います。どちらも数マイクロメートルのスケールでマイクロフォーカスX線CTで、通常の撮影を行っても十分な精度でCT画像を得ることが困難であると考えられています。そこで高精度な撮影を行うために積算回数撮影方向数を増やし画像の精度を向上させることが考えられますが、長時間撮影を行うと焦点移動による画質低下の影響が大きくなり、画像にボケが生じる可能性が高いです。

これまでに機械的に焦点移動を補正する機構はすでに提案されていますが、機械的に補正することには限界があり、さらにコストアップが問題となっています。したがって画像データ上で焦点移動を補正するアルゴリズムはCT装置に大きなメリットをもたらすことができます。

本研究ではX線CT装置における焦点移動に着目し、この現象が画像に与える影響を調べるとともに、その補正を行いX線CT画像の精度を向上させることを目的としています。

ウイルスとトロイの木馬について

通信に潜む危険

ネットワークに接続してほかのコンピュータに接続することは便利な反面、様々な危険を伴う可能性があります。その代表的な例として、ウイルスやトロイの木馬がありその概要を調べてみました。

ウイルス

ほかのプログラムやデータに寄生し、不正動作を行うもの。一つのファイルから別のファイルへと感染していき、ファイルをコピーしたり共有することで別のPCへと感染していく。ほとんどのウイルスはPCを操作不能にすることを目的としているので、ファイルを削除したり、破壊したりという行為を行う。常にアンチウイルスソフトを最新の状態に保ち、怪しげなファイルは開かないことが大切。

トロイの木馬

有用なプログラムを装ってユーザーにインストールさせ、ユーザーの意図しない不正動作を行うもの。ウェブサイトに対してDoS攻撃を仕掛けたり、攻撃を隠すためにプロキシサーバに攻撃したり、スパムメールを大量に送りつけたりといった行為を行う。

DoS攻撃
インターネット経由での不正アクセス。大量のデータや不正パケットを送りつける。
プロキシサーバ

企業などの内部ネットワークとインターネットの境目にあって、直接インターネットに接続できない内部ネットワークのコンピュータに代わって、インターネットとの接続を行うコンピュータ
スパムメール…
受信者の意図しない、無差別かつ大量に送信されるメールのこと。広告メールなど。

スパイウェア

PC内のデータをユーザーに十分に説明することなく収集し抜き取るためのもので、データを破壊する能力はない。トロイの木馬の一種と分類されることもある。収集するデータにはパスワードなどログイン情報や、検索傾向、クレジットカードの番号が含まれる。感染してもPCはこれまで通り正常に動作するので、感染したままPCを使い続けてしまっている可能性がある。多くのスパイウェアに感染してしまうと、PCの動作はだんだん遅くなっていく。

ワーム

ネットワークを介して感染する。

ウイルスなどをまとめてマルウェアと呼んでいます。それぞれの違いについてこれまで意識していませんでしたが、使っているアンチウイルスソフトで対応しているものしていないものがあるようなので、しっかり確認する必要がありそうです。ウイルス以外にも危険は多く、盗聴改ざんによって、不正にパケットが盗まれる場合や、不正アクセスや、DoS攻撃によって外部から攻撃されることもあります。

X線発生原理について

1.X線とは…

1895年、ドイツの物理学者ヴィルヘルム・コンラート・レントゲンにより発見された非常に波長の短い電磁波の一種で、波長は1pm~10nmの範囲にあります。

波長

X線には以下の性質があります。

  • 波長が短いので物質に対し透過性が高い。物質は密度が高く、厚みがあるものほど透過しにくい。
  • 直線的に進み、磁界、電界による影響を受けない。
  • 5感で感じることができない。
  • 原子から電子をはぎ取る(電離する)性質がある。

X線は放射線の一種で一度に大量に浴びると、ガンを発症させたりときには死に至らしめる危険性があります。CT撮影に置いてもX線を使用するため、被爆量に関しては大変シビアになっています。撮影の仕方にもよりますが、胸部撮影で0.1mSv、胃透視で15mSv、CT検査で20mSvとなっています。通常に生活していても大地や宇宙からの放射線で一年間に2.4mSvの放射線を浴びています。さらに成田からNYまで飛行機に乗るだけで0.1mSvの放射線を浴びることになり、年数回の検査では体への影響は心配する必要はなさそうです。ちなみに一度に1000mSvを超える放射線を浴びると白血病やガンになる可能性があるようです。徐々に浴びる分にはあまり体への害を考える必要はなさそうですが、一度に大量に浴びるようなことはさけなければならないようです。

 2.X線発生原理について

下の図のようなX線管では陽極のターゲットに陰極のフィラメントから発生した電子を衝突させることでX線を発生させています。X線管は真空管の一種です。

x-ray tube

この時、陰極には数十~数百kVの高電圧がかけられます。陰極から発生した電子が高電圧下で加速され、タングステン等の重金属でできたターゲットに衝突することで、X線が発生しています。X線発生効率は非常に低く、電子の運動エネルギーの99%は熱エネルギーに変わりターゲットを加熱していると言われています。この時ターゲットは1000℃程度まで熱せられていて熱膨張により形状が変形していることが考えられています。

3.光電効果とコンプトン散乱について

X線の吸収は光電効果コンプトン散乱によって起こります。X線のエネルギーが小さいときは主に光電効果が起き、エネルギーが大きくなるに従ってコンプトン散乱が起きます。

光電効果

X線がそのまま物体に吸収され、代わりに物質から電子が放出される現象。光電効果が発生する確率は物体の原子番号が大きくなるほど高くなります。これは原子番号が増えるに従って電子の数もふえるため、光電効果が起きる確率が高くなります。

コンプトン散乱

短波長(エネルギーの大きい)のX線が比較的に原子番号の小さい原子に衝突した場合に波長が増加(エネルギーを失う)してX線が放出される現象。具体的にはX線のエネルギーが電子の結合エネルギーよりもずっと大きい場合に軌道電子をはねとばし、自らはそのときにぶつかったエネルギーを失って運動の向きを変える現象。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−参考文献−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

「放射線と物質との相互作用」

「Wikipedia 放射線」

「X線(エックス線)による光電効果の発生確率と物質の原子番号との関係」