diff --git a/core/random.cpp b/core/random.cpp
new file mode 100644
index 0000000..51b137e
--- /dev/null
+++ b/core/random.cpp
@@ -0,0 +1,38 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014,  Regents of the University of California,
+ *                      Arizona Board of Regents,
+ *                      Colorado State University,
+ *                      University Pierre & Marie Curie, Sorbonne University,
+ *                      Washington University in St. Louis,
+ *                      Beijing Institute of Technology,
+ *                      The University of Memphis
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "random.hpp"
+
+namespace nfd {
+
+static boost::random::mt19937 g_rng;
+
+boost::random::mt19937&
+getGlobalRng()
+{
+  return g_rng;
+}
+
+} // namespace nfd
diff --git a/core/random.hpp b/core/random.hpp
new file mode 100644
index 0000000..1515b72
--- /dev/null
+++ b/core/random.hpp
@@ -0,0 +1,49 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2014,  Regents of the University of California,
+ *                      Arizona Board of Regents,
+ *                      Colorado State University,
+ *                      University Pierre & Marie Curie, Sorbonne University,
+ *                      Washington University in St. Louis,
+ *                      Beijing Institute of Technology,
+ *                      The University of Memphis
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * This file declares the global random number generator
+ * All random numbers in NFD should use this global random number generator,
+ * so that the generator can be properly seeded when necessary.
+ *
+ * This random number generator is not suitable for security purposes;
+ * security-critical code should use CryptoPP random number generator instead.
+ */
+
+#ifndef NFD_CORE_RANDOM_HPP
+#define NFD_CORE_RANDOM_HPP
+
+#include <boost/random/mersenne_twister.hpp>
+
+namespace nfd {
+
+/** \return the global random number generator instance
+ */
+boost::random::mt19937&
+getGlobalRng();
+
+} // namespace nfd
+
+#endif // NFD_CORE_RANDOM_HPP
diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index 4d0deeb..45728ea 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  Regents of the University of California,
- *                     Arizona Board of Regents,
- *                     Colorado State University,
- *                     University Pierre & Marie Curie, Sorbonne University,
- *                     Washington University in St. Louis,
- *                     Beijing Institute of Technology
+ * Copyright (c) 2014,  Regents of the University of California,
+ *                      Arizona Board of Regents,
+ *                      Colorado State University,
+ *                      University Pierre & Marie Curie, Sorbonne University,
+ *                      Washington University in St. Louis,
+ *                      Beijing Institute of Technology,
+ *                      The University of Memphis
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -20,12 +21,13 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #include "forwarder.hpp"
-#include <ndn-cxx/util/random.hpp>
 #include "core/logger.hpp"
+#include "core/random.hpp"
 #include "available-strategies.hpp"
+#include <boost/random/uniform_int_distribution.hpp>
 
 namespace nfd {
 
@@ -169,7 +171,8 @@
 
   if (wantNewNonce) {
     interest = make_shared<Interest>(*interest);
-    interest->setNonce(ndn::random::generateWord32());
+    static boost::random::uniform_int_distribution<uint32_t> dist;
+    interest->setNonce(dist(getGlobalRng()));
   }
 
   // insert OutRecord
diff --git a/daemon/fw/ncc-strategy.cpp b/daemon/fw/ncc-strategy.cpp
index 6e7a32c..3b17ab1 100644
--- a/daemon/fw/ncc-strategy.cpp
+++ b/daemon/fw/ncc-strategy.cpp
@@ -1,11 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  Regents of the University of California,
- *                     Arizona Board of Regents,
- *                     Colorado State University,
- *                     University Pierre & Marie Curie, Sorbonne University,
- *                     Washington University in St. Louis,
- *                     Beijing Institute of Technology
+ * Copyright (c) 2014,  Regents of the University of California,
+ *                      Arizona Board of Regents,
+ *                      Colorado State University,
+ *                      University Pierre & Marie Curie, Sorbonne University,
+ *                      Washington University in St. Louis,
+ *                      Beijing Institute of Technology,
+ *                      The University of Memphis
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -20,9 +21,11 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #include "ncc-strategy.hpp"
+#include "core/random.hpp"
+#include <boost/random/uniform_int_distribution.hpp>
 
 namespace nfd {
 namespace fw {
@@ -140,8 +143,9 @@
   }
 
   if (isForwarded) {
-    static unsigned short seed[3];
-    time::nanoseconds deferNext = time::nanoseconds(nrand48(seed) % pitEntryInfo->maxInterval.count());
+    boost::random::uniform_int_distribution<time::nanoseconds::rep> dist(
+      0, pitEntryInfo->maxInterval.count() - 1);
+    time::nanoseconds deferNext = time::nanoseconds(dist(getGlobalRng()));
     pitEntryInfo->propagateTimer = scheduler::schedule(deferNext,
     bind(&NccStrategy::doPropagate, this,
          weak_ptr<pit::Entry>(pitEntry), weak_ptr<fib::Entry>(fibEntry)));
diff --git a/daemon/table/cs.cpp b/daemon/table/cs.cpp
index ad666d5..f1bbb0f 100644
--- a/daemon/table/cs.cpp
+++ b/daemon/table/cs.cpp
@@ -27,11 +27,15 @@
 
 #include "cs.hpp"
 #include "core/logger.hpp"
+#include "core/random.hpp"
 #include <ndn-cxx/util/crypto.hpp>
-#include "ndn-cxx/security/signature-sha256-with-rsa.hpp"
+#include <ndn-cxx/security/signature-sha256-with-rsa.hpp>
+#include <boost/random/bernoulli_distribution.hpp>
 
-#define SKIPLIST_MAX_LAYERS 32
-#define SKIPLIST_PROBABILITY 25         // 25% (p = 1/4)
+/// max skip list layers
+static const size_t SKIPLIST_MAX_LAYERS = 32;
+/// probability for an entry in layer N to appear also in layer N+1
+static const double SKIPLIST_PROBABILITY = 0.25;
 
 NFD_LOG_INIT("ContentStore");
 
@@ -265,17 +269,15 @@
 size_t
 Cs::pickRandomLayer() const
 {
-  int layer = -1;
-  int randomValue;
-
-  do
-    {
-      layer++;
-      randomValue = rand() % 100 + 1;
+  static boost::random::bernoulli_distribution<> dist(SKIPLIST_PROBABILITY);
+  // TODO rewrite using geometry_distribution
+  size_t layer;
+  for (layer = 0; layer < SKIPLIST_MAX_LAYERS; ++layer) {
+    if (!dist(getGlobalRng())) {
+      break;
     }
-  while ((randomValue < SKIPLIST_PROBABILITY) && (layer < SKIPLIST_MAX_LAYERS));
-
-  return static_cast<size_t>(layer);
+  }
+  return layer;
 }
 
 bool
