1: 田杉山脈 ★ 2018/08/13(月) 17:24:20.61 _USER
sfddindex
プログラミング言語を用いて書かれた「ソースコード」はあらかじめ定められた規則に従って記述する必要があり、匿名で公開されたコードから個人を識別することは困難に思えるかもしれません。ところが、実際にはコードにも個人の特徴が色濃く表れており、機械学習を用いてコードのサンプルから個人を識別できることが判明しました。

ドレクセル大学のコンピューターサイエンス准教授であるレイチェル・グリーンシュタット氏と、ジョージ・ワシントン大学でコンピューターサイエンスの准教授を務めるアイリン・カルスキン氏は、プログラミング言語で書かれたコードは完全に匿名のものではなく、機械学習を用いて個人を識別可能だという研究結果を発表しました。

2人は機械学習のアルゴリズムにコードサンプルを分析させ、用いた言葉の選択やコードの長さ、コードのまとめ方といったあらゆる特徴を抽出しました。次に2人は抽出された特徴の中から、開発者個人を識別するのに役立つ特徴のみを選別し、コードから個人を特定する時に注目するべきリストを絞り込んだとのこと。コードの書き手は通常の文章と違い、一定の規則に従ってコードを書き進めなければならないという制約がありますが、それでもコードから個人を識別可能な特徴を抽出できるようです。

また、コードサンプルは非常に長いものである必要があるわけでもなく、グリーンシュタット氏らが発表した2017年の論文(PDF)によればGitHubに公開されたほんの短いコードの断片であっても、特定の開発者とそれ以外の開発者を識別できるとのこと。加えて、すでに0と1で表される機械語にコンパイルされたコードからでも、個人の識別が可能だとカルスキン氏は述べました。

カルスキン氏らの研究チームは、Googleが開催するプログラミングコンテストのGoogle Code Jamで書かれたコードをもとに、100人の開発者が書いたコードをアルゴリズムに識別させました。すると、実に96%の精度で個人を識別することができたとのこと。また、識別する開発者数を600人にまで拡大した場合でも、83%の精度で個人を識別できたとしています。

グリーンシュタット氏とカルスキン氏は、プログラミングを勉強する学生が他のコードを盗用したのかどうかを判断する場合や、マルウェアの開発者を特定する時などにコードから個人を識別するAIが役立つとしています。また、関係のない第三者を装って行われたサイバー犯罪に対しても、背後にいる人物の存在をあぶり出すことができるとのこと。

一方でオープンソースプロジェクトに匿名で参加しているプログラマーや、匿名でコードを公開しているプログラマーのプライバシーが脅かされる可能性もあります。「コード開発者の身元を100%隠すことは、一般的に考えて難しいと理解する必要があります」とグリーンシュタット氏は述べており、将来的にはコードから個人を識別不可能にするツールが開発されるかもしれないが、しばらくは匿名で公開したコードから個人を特定される危険性があるとしました。

また、グリーンシュタット氏らはプログラミングの初級者と上級者では、上級者のほうが個人を識別しやすいという事実も発見しました。これは、初心者がコードの一部をプログラミング練習サイトからコピーしてくる場合があって特徴が出にくいのに対し、上級者になればなるほどコーディングがこなれてきて、個人間に差異が出やすいためだそうです。他にも、2人はコードのサンプルが「簡単な問題を解決するために書かれたコード」である場合よりも、「複雑な問題を解決するために書かれたコード」である場合のほうが個人の識別精度が向上することも突き止めました。

グリーンシュタット氏らが行った予備調査では、カナダ人の書いたコードと中国人の書いたコードを90%以上の精度で判別できるなど、コードから得られる情報は予想以上に多いようです。記事作成時点では、コードによる個人の識別は指紋による個人識別のように100%に近い精度を持っているわけではありませんが、今後さらに識別精度が向上していくだろうと考えられています。
https://gigazine.net/news/20180813-machine-learning-identify-code-authors/
引用元: http://egg.5ch.net/test/read.cgi/bizplus/1534148660/


17: 名刺は切らしておりまして 2018/08/13(月) 17:55:10.40
>>1
ポールグラハムのスパムフィルターで十分だろw

2: 名刺は切らしておりまして 2018/08/13(月) 17:27:25.77
そりゃ筆跡鑑定が可能なんだからそれくらいできんだろ

4: 名刺は切らしておりまして 2018/08/13(月) 17:34:05.79
>>2
だね
機械学習とか以前の問題だと思う

3: 名刺は切らしておりまして 2018/08/13(月) 17:32:02.39
職場ではコーディング規約に沿ってる

12: 名刺は切らしておりまして 2018/08/13(月) 17:50:52.99
>>3
コーティング規約に沿っていても、変数の作り方、宣言の仕方、初期化の仕方色々癖は出る。

7: 名刺は切らしておりまして 2018/08/13(月) 17:37:38.09
無知かよネットは匿名やろ呆

8: 名刺は切らしておりまして 2018/08/13(月) 17:41:02.63
個人の特色は絶対に出るから当たり前のことのように思えるけど
判別できたら、どうなるん?

9: 名刺は切らしておりまして 2018/08/13(月) 17:47:41.95
>>8
あんたの名前もわかっちゃう

15: 名刺は切らしておりまして 2018/08/13(月) 17:53:24.15
少数しかいないから分かるだけ

16: 名刺は切らしておりまして 2018/08/13(月) 17:55:02.01
そんな事はプログラマーなら既知じゃないの?

38: 名刺は切らしておりまして 2018/08/13(月) 18:40:23.44
>>16
限られたメンバー内であればコード読めばなんとなく誰が書いたかわかるからな
機械学習のような手法を使えば癖を読む精度を上げられそうなのは当然だろう

18: 名刺は切らしておりまして 2018/08/13(月) 17:56:34.46
タイピングの各文字間の打刻時間差で個人が判別可能ってのは15年くらい前に見たよなあ
人によって一文字ごとの撃つタイミングに癖があるから

19: 名刺は切らしておりまして 2018/08/13(月) 17:56:47.26
おいらのインデントは他人と違うからすぐわかるよ

20: 名刺は切らしておりまして 2018/08/13(月) 17:57:50.61
ふーん
まぁ、癖ってあるだろうからね
その人のソースコードが多ければ多いほど、特定できる可能性も高まるだろうね

21: 名刺は切らしておりまして 2018/08/13(月) 17:57:55.20
メーカーが仕様を公開していない機器のオープンソースのデバイスドライバ、
みたいな、使う側には非常に有り難いけれど出所が突き止められたらヤバそうな
プログラムソースもあるからなぁ。

23: 名刺は切らしておりまして 2018/08/13(月) 18:06:22.62
ウイルス作者ガクブル

25: 名刺は切らしておりまして 2018/08/13(月) 18:09:16.43
>>23
ねーよ
オブファスケーションするからまずわからない

26: 名刺は切らしておりまして 2018/08/13(月) 18:11:53.62
「facebook等からパターンを学習させることで、5chのレスから筆者を推定します」
こういうのが出てきたら一部に需要があるかもしれん

27: 名刺は切らしておりまして 2018/08/13(月) 18:12:18.61
機械学習だから学習してないものはどうなるの?

29: 名刺は切らしておりまして 2018/08/13(月) 18:16:12.22
学習データがないと意味ないじゃん

30: 名刺は切らしておりまして 2018/08/13(月) 18:17:34.36
ここの書き込みの文章の癖から
個人特定するのなんかすぐなんだろうなw

32: 名刺は切らしておりまして 2018/08/13(月) 18:30:16.34
やば
変数名に自分の名前使うのやめよう

34: 名刺は切らしておりまして 2018/08/13(月) 18:33:57.99
>>32
何やってんだよ
せめてselfとかthisぐらいにしとけよ

33: 名刺は切らしておりまして 2018/08/13(月) 18:32:39.96
まあデータが膨大ならパラメータ不明のブラックボックスだし
2度と同じものも作れない 「だから?」で済むよ

37: 名刺は切らしておりまして 2018/08/13(月) 18:40:18.76
職場だとauthor書かされるから別にメリットなし(´・ω・`)

39: 名刺は切らしておりまして 2018/08/13(月) 18:41:01.13
hogehogeのかわりにhigehigeって埋め込んだコードが俺だとばれてしまう…

42: 名刺は切らしておりまして 2018/08/13(月) 18:57:43.76
昔から言われてたよね

46: 名刺は切らしておりまして 2018/08/13(月) 19:13:52.27
書き手のわかってるソースコードのデータがないとだめ

しかもコードの書き方に100通りぐらいのタイプがあるとして
100人の中から識別するならあるていど特定できても
100万人の中から識別するなら誰だか特定するのは難しそう

そもそもソースコードを公開しつつ
誰が書いたのか伏せたいような状況はかなり限られる

56: 名刺は切らしておりまして 2018/08/13(月) 20:38:10.94
>>46
gitなら行ごとに作者が分かる

53: 名刺は切らしておりまして 2018/08/13(月) 20:21:52.60
5chは非匿名だと思っていないので、見られてもいいような事しか書いていない。

54: 名刺は切らしておりまして 2018/08/13(月) 20:31:12.82


C言語も
Pythonも 関係ねぇーだろ。

ソースコードを単語ごとに分解して それ 頻度ごとに並べ替えて つながりを分析すれば
指紋みたいなものが分かるってことだろ。

っていうかぁ
ソースコードそのものを AIで作れって話に 進まないとおかしい。けど
こんなのは 序の口。

55: 名刺は切らしておりまして 2018/08/13(月) 20:36:15.63
ソースコードを公開していればの話

58: 名刺は切らしておりまして 2018/08/13(月) 20:54:46.24
オプティマイザ通してもわかるの? ちょっと眉唾

62: 名刺は切らしておりまして 2018/08/13(月) 21:52:04.62
他人のソースコードのコピペでコードを書く俺はどう判定されるんだろう

67: 名刺は切らしておりまして 2018/08/13(月) 23:58:31.36
そんなに難しくなさそうだけどな。

68: 名刺は切らしておりまして 2018/08/14(火) 02:12:25.49
これはこれで対抗手段の出現、すなわちコードから個人の癖を消す技術の開発へと進化するだろうね

70: 名刺は切らしておりまして 2018/08/14(火) 06:30:00.45
関数型というかPascal系のシンタクスだと複数の書き方ができなくて個性が出にくいというのはありそう
というかそれがウリの言語だし

スポンサード リンク