ソースコードは人を表す!? 機械学習を使い、96%の精度でコードから個人を識別することが可能に

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@涙目です。(宮城県) [US]2018/08/13(月) 21:03:35.41ID:O3/1suhR0●?PLT(13121)

機械学習を用いると匿名のソースコードから個人を識別可能であることが判明

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

DEF CONR 26 Hacking Conference Speakers
https://www.defcon.org/html/defcon-26/dc-26-speakers.html#Greenstadt

Machine Learning Can Identify the Authors of Anonymous Code | WIRED
https://www.wired.com/story/machine-learning-identify-anonymous-code/

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

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

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

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

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

https://gigazine.net/news/20180813-machine-learning-identify-code-authors/

0076名無しさん@涙目です。(静岡県) [US]2018/08/14(火) 08:59:56.64ID:7z++M/V80
>>73
自社のコーティング規約だと&&もカッコで分離せんとあかんw
a=(2*3)+4; ←さすがにクドくね?

0077名無しさん@涙目です。(静岡県) [US]2018/08/14(火) 09:05:47.95ID:7z++M/V80
>>75
アセンブラ必須のコードを書く時って、まずCで書いてコンパイルしてからコードを盗んだ方が効率よかったりするw
厄介なのはパイプラインにおける投機実行だね

条件分岐
命令 ←ここに来ない時も実行される

0078名無しさん@涙目です。(茸) [ニダ]2018/08/14(火) 09:13:55.02ID:J1YV7hB70
>>75
パイプラインじゃなくてメモリのウェイト、キャッシュ、割り込みじゃね。
そも水晶クロックが不正確なので高精度な周期を得たいならGPSのパルスとかが必要だな。

0079名無しさん@涙目です。(東京都) [US]2018/08/14(火) 09:33:10.96ID:tNFv2ta30
>>76
算術加減算の優先順位はさすがに忘れないが、
論理演算の優先順位なんて覚えているプログラマーは少数派だ。

0080名無しさん@涙目です。(静岡県) [US]2018/08/14(火) 09:40:43.13ID:7z++M/V80
>>79
「そんくらい覚えてるだろ?」って人もいて、そーゆー人が謎のコード書くんで全部が全部ダメになったんだろなw

んで、QACとか言うコードチェッカーが義務付けられてて、1+2*3なんて書くと「カッコつけれや」ってエラー(ワーニング)になるw

>>79
算数レベルならともかくドツボにはまるぐらいなら括弧つけた方が良いよね

0082名無しさん@涙目です。(SB-iPhone) [US]2018/08/14(火) 11:28:03.43ID:DeyoXQeD0
ウースターソースさえあれば良い

0083名無しさん@涙目です。(東京都) [ニダ]2018/08/14(火) 13:40:05.35ID:IBMtpE1K0
/*なぜかこれだとうまく行く。*/
これほど怖いコメントはない。

0084名無しさん@涙目です。(静岡県) [US]2018/08/14(火) 17:41:24.59ID:7z++M/V80
>>83
なぜ、そこでフラグをクリアしてるかわからない。
どう考えてもいらないと思うんだが削除は怖い、って処理は確かにあるw

0085名無しさん@涙目です。(チベット自治区) [MX]2018/08/14(火) 17:48:24.34ID:udmIrhHm0
>>27
これなんだよなあ

変数名が困るわ
ボキャブラリー少ないからすぐ枯渇するわ

0087名無しさん@涙目です。(静岡県) [US]2018/08/14(火) 18:18:03.75ID:7z++M/V80
>>86
カッコいいモジュール名決めるためだけに時間潰す自分がいるw

0088名無しさん@涙目です。(チベット自治区) [US]2018/08/14(火) 18:24:51.77ID:KmZSVFOU0
>>73
まさか if文内でわざと代入してるわけじゃないよな

0089名無しさん@涙目です。(東京都) [US]2018/08/14(火) 18:27:43.55ID:IR4ugev40
>>86
グローバル変数でも無い限り、枯渇とかあり得ないから。

0090名無しさん@涙目です。(チベット自治区) [US]2018/08/14(火) 18:29:37.12ID:KmZSVFOU0
>>89
グローバル変数にはg_xxxx、ファイルの変数はf_xxxxてつけるよな
グローバル変数がiというソースは見たことあるけど

0091名無しさん@涙目です。(catv?) [CN]2018/08/14(火) 18:30:40.94ID:EHPRufyj0
だから何?

0092名無しさん@涙目です。(dion軍) [CA]2018/08/14(火) 18:32:39.80ID:51xhAK120
>>89
アスペか
役割が全く違うけど適切だと思えるネーミングがバッティングする事なんてよく起こるわ
変数名というよりもクラス名だけど

0093名無しさん@涙目です。(チベット自治区) [CN]2018/08/14(火) 18:36:16.28ID:GgzZaDu10
「このソースコード…まさか、伝説の苺キンタマウイルスの作者か!?」

0094名無しさん@涙目です。(東京都) [US]2018/08/14(火) 18:56:02.08ID:IR4ugev40
>>92
ネームスペース違うから普通はぶつからない。

0095名無しさん@涙目です。(東京都) [US]2018/08/14(火) 18:58:44.68ID:IR4ugev40
ローカル変数がぶつかるって、複数の機能を一個の関数に詰め込んでる証拠だから。

0096名無しさん@涙目です。(茸) [JP]2018/08/14(火) 19:02:19.59ID:fEeI6Ryi0
次に直すときのために至るところにコメントが書いてあるけど途中で飽きて書かなくなってたら俺だ

0097名無しさん@涙目です。(新疆ウイグル自治区) [US]2018/08/15(水) 01:58:36.58ID:30/M2DlE0
TO DOしか書いてないコメントのことかー!!!

0098名無しさん@涙目です。(庭) [ニダ]2018/08/15(水) 02:02:05.35ID:8yZuGmWn0
まぁそうだろうな。変数の名前やコメントの書き方だけで識別できそうな気がする

0099名無しさん@涙目です。(愛知県) [NI]2018/08/15(水) 03:06:52.72ID:hO1uMCEA0
>>76
そんなこと言い出したら
「=」だって代入演算子なわけだから
a=((2*3)+4); って書かなきゃ
規則の整合性が取れなくなるぜ

0100名無しさん@涙目です。(静岡県) [ニダ]2018/08/15(水) 03:21:38.72ID:c3V6JMyg0
>>17
Linuxのコーディングスタイルだからな
採用してるところは多そう

0101名無しさん@涙目です。(チベット自治区) [US]2018/08/15(水) 09:00:41.00ID:vc3s70sp0
>>100
昔のFORTRANを紙カードで書いてた時代の名残なんだろな

0102名無しさん@涙目です。(静岡県) [US]2018/08/15(水) 09:34:07.12ID:RIm+NAMT0
>>99
そっちが推奨されてるけど、コードチェッカーに引っかからないんで流石にスルーしてるw

0103名無しさん@涙目です。(dion軍) [CA]2018/08/15(水) 09:42:48.40ID:4iczfTkb0
論理演算子やビット演算子の優先順位や結合性は
言語や時代、コンパイラによって異なるモノまであるんだから計算意図を明確にするなんて当然やで

0104名無しさん@涙目です。(東京都) [US]2018/08/15(水) 12:28:23.88ID:IVGldtuY0
不要なカッコを禁止している規約があって、呆れた思い出。
return (hoge);
がダメ、当然、
#define BAD_CASE (-1);
もダメ。
ああ、副作用怖く無いんだろうなぁ

0105名無しさん@涙目です。(茸) [CN]2018/08/15(水) 12:35:33.94ID:luH3LIBK0
そうだろうな
俺めっちゃ癖あるし

0106名無しさん@涙目です。(茸) [US]2018/08/15(水) 13:01:29.11ID:Y2Kq/1Id0
癖が凄い

0107名無しさん@涙目です。(catv?) [ニダ]2018/08/15(水) 13:09:07.81ID:0W9uKAhg0
>>49
なるほど
それで記述してたから直すわ
といっても、趣味だから誰もソースなんて見ないけど

0108名無しさん@涙目です。(東京都) [VN]2018/08/15(水) 13:32:24.71ID:A/6ennD00
ホントはすっごい癖あんのに披露しちゃうと特定されてるから
黙ってるだろそこのお前m9(`・ω・´)

0109名無しさん@涙目です。(福島県) [US]2018/08/15(水) 13:34:45.03ID:z4eEdT3l0
>>104
「不要では無い」を主張して規約を変えさせれば良いじゃん。
例示は要ると思うけど。

0110名無しさん@涙目です。(茸) [US]2018/08/15(水) 15:45:58.90ID:Y2Kq/1Id0
>>104
関数呼び出しと間違えるから?

retrun(hoge);

0111名無しさん@涙目です。(SB-iPhone) [US]2018/08/15(水) 16:08:15.35ID:BIH3BZAa0
あ、#defineの最後って、セミコロン必要だっけ?

0112名無しさん@涙目です。(東京都) [VN]2018/08/15(水) 16:16:47.46ID:A/6ennD00
>>111
いらないよ
確認するのに昔書いたc++のソース引っ張り出したけど酷いなコレ

0113名無しさん@涙目です。(四国地方) [US]2018/08/15(水) 16:21:48.20ID:vgH/APEX0
セミコロン書いたらマクロ展開の方に混ざるで…

0114名無しさん@涙目です。(catv?) [MX]2018/08/15(水) 19:13:20.82ID:s1oSb9Ue0
コピペの塊だし、すぐにわかるだろう

>>83
else if節で何故か異常動作してて
elseで改行して次行からif文書くと何故か上手く動いた事があって
なんでそれで上手く行くのかさっぱりわからないから
コメントに「変更しちゃダメ!」って書いておいたw

0116名無しさん@涙目です。(静岡県) [US]2018/08/15(水) 21:11:20.69ID:RIm+NAMT0
>>115
デバッガでアセンブルコードを表示して、両方を比べると差があるかもだね。
組み込み制御だとユーザー数が少ないからなのかコンパイラのバグ情報が結構あって、これが定期的に流れてくる。
多くは最適化のバグ。
なので、規約で最適化なしか(速度容量的に無理なら)最低にする事になってる。

0117名無しさん@涙目です。(福井県) [JP]2018/08/16(木) 11:43:04.86ID:8r+ncArd0
冒頭にコメントで名前書いてるしな

0118名無しさん@涙目です。(SB-iPhone) [GB]2018/08/16(木) 12:07:23.75ID:v9/0EhcV0
名前とか日付とかコメント書くし

0119名無しさん@涙目です。(東京都) [DE]2018/08/16(木) 12:28:10.16ID:y0mdGHYy0
>>9

Tomohiko Sakamoto algorithmとかね。

0120名無しさん@涙目です。(SB-iPhone) [US]2018/08/16(木) 13:41:45.61ID:NNKzV/350
>>116
ガラパゴスCPU使ってるからだろ。
ARM使えよ。

0121名無しさん@涙目です。(静岡県) [US]2018/08/16(木) 15:00:03.15ID:j5n52hMs0
>>120
コアがARMのSOC多くね?
バグはチップと言うより開発環境によるけど。

0122名無しさん@涙目です。(SB-iPhone) [US]2018/08/16(木) 15:03:58.83ID:NNKzV/350
>>121
ARMならメジャーなコンパイル環境幾らでもあんぞ。

0123名無しさん@涙目です。(静岡県) [US]2018/08/16(木) 15:07:02.73ID:j5n52hMs0
>>122
商売だと会社指定になるんで選べない。
それと、メジャーコンパイラにもバグ情報結構あって、サポート契約してると流れてくるよ。
コンパイラが何がしらのバージョンアップする理由のひとつだね。

0124名無しさん@涙目です。(静岡県) [US]2018/08/16(木) 15:10:27.43ID:j5n52hMs0
>>122
サポート契約してるとチェッカーが入手できるんだけど、これかけるとバグになるパターンが警告される。
当たり前のパターンはテストされつくしてるからコーティング規約がしっかりしてればエラーにはならない。

「そんな書き方するかよ」ってコードが対象だね。

0125名無しさん@涙目です。(茸) [US]2018/08/16(木) 16:45:49.82ID:ticSFVk50
>>121
ARMはプロセッサの設計情報売りしてるからな。
SoC製造各社それ買って独自の周辺機能付けて…ってやってるから。

0126名無しさん@涙目です。(静岡県) [US]2018/08/16(木) 16:51:00.54ID:j5n52hMs0
>>125
だね。
使ってるCPU(Soc)はJADEとかEmerldとかRcarなんだけど、コアは全部ARMだったりする。

■ このスレッドは過去ログ倉庫に格納されています